ccf201803-2 碰撞的小球
題目:
題目分析:
由於資料量不是很大,所以可以使用暴力模擬。
三個陣列a,b,c:陣列a記錄小球位置,b記錄對應小球速度,c作為方向改變標記
對於每一秒,我們都可以根據上一秒的狀態來進行推出,並且根據當前的狀態,推出下一秒的速度,初始速度都是1,相反方向速度為-1。
所以每一秒的位置改變等於:a[j]+=b[j]
當兩個小球j,k位置相等並且沒有改變方向,注意排除同乙個小球的情況時,改變他們的方向:即 b[j]=b[j](-1); b[k]=b[k](-1);
另外還需要注意:
1.每此碰撞乙個小球的方向只改變一次,不要重複改變,這裡用陣列c標記是否已改變方 向
2.到了邊界0或者l,要改變方向。
//ccf201803-2 碰撞的小球
#includeusing namespace std;
int a[110],b[110],c[110],n,l,t;
//陣列a記錄小球位置,b記錄對應小球速度,c作為方向改變標記
int main()
for(int i=1;i<=t;i++)
for(int j=1;j<=n;j++)
}} }
for(int i=1;i<=n;i++)cout<
return 0;
}
CCF 201803 2 碰撞的小球
問題描述 提示因為所有小球的初始位置都為偶數,而且線段的長度為偶數,可以證明,不會有三個小球同時相撞,小球到達線段端點以及小球之間的碰撞時刻均為整數。同時也可以證明兩個小球發生碰撞的位置一定是整數 但不一定是偶數 輸入格式 輸入的第一行包含三個整數n,l,t,用空格分隔,分別表示小球的個數 線段長度...
CCF201803 2 碰撞的小球
解決方案 使用陣列pos i 儲存第i個球的初始位置 使用陣列step i 儲存第i個球現在的運動方向,step i 1表示向右走,step i 1表示往左走,用加法運算就可以實現小球的移動。模擬過程是按照時間序列,先計算小球的下乙個位置,如果該位置為兩端則改變運動方向。再根據小球的新位置看看有沒有...
CCF 201803 2 碰撞的小球
思路 1.用陣列 a i j 記錄第 i 時刻第 j 個小球的位置,此處用的 i,j 編號均從零開始。2.用陣列 dir j 記錄第 j 個小球的方向,dir j 1 或 dir j 1 初始化為 1,因為小球初始時都向右移。3.如果小球相撞或碰到邊緣,就修改小球運動的方向,即令 dir j dir...