201803-2 碰撞的小球
阿新 • • 發佈:2018-12-19
#include <iostream> using namespace std; const int M=110; int ball[M]; int flag[M]; int main(){ int n,l,t; cin>>n>>l>>t; for(int i=0;i<n;i++){ cin>>ball[i]; flag[i]=1; } while(t--){ for(int i=0;i<n;i++){ if((ball[i]==0&&flag[i]==-1)||(ball[i]==l&&flag[i]==1)){ flag[i]=flag[i]*(-1); } } for(int i=0;i<n-1;i++){ for(int j=i+1;j<n;j++){ if(ball[i]==ball[j]){ flag[i]=flag[i]*(-1); flag[j]=flag[j]*(-1); } } } for(int i=0;i<n;i++){ ball[i]=ball[i]+flag[i]; } } for(int i=0;i<n;i++){ cout<<ball[i]<<" "; } }
思路:將小球初始存在一個數組,以一秒鐘為一個時間進行模擬;
考慮在這一秒後,這個小球的位置應該為加一還是減一,設定另一陣列儲存這一秒應該變化的量;
然後將這一秒鐘之後小球的位置進行變化;依次進行下一秒;