CCF201803 2 碰撞的小球

2021-08-26 12:25:20 字數 620 閱讀 9247

解決方案

使用陣列pos[i]儲存第i個球的初始位置;使用陣列step[i]儲存第i個球現在的運動方向,step[i]=1表示向右走,step[i]=-1表示往左走,用加法運算就可以實現小球的移動。

模擬過程是按照時間序列,先計算小球的下乙個位置,如果該位置為兩端則改變運動方向。再根據小球的新位置看看有沒有2個小球碰頭,有的話分別改變運動方向。只是簡單地判斷2個小球是否碰頭需要用暴力法算一下。

**如下

#include 

using

namespace

std;

int pos[1001],step[1001];

int main()

//模擬

for(int i=0;i//每個座標都要相加

for(int j=0;jif(pos[j]==l||pos[j]==0)

step[j]=-step[j];

}//尋找是否有相等的座標。

for(int j=0;jfor(int k=j+1;kif(pos[j]==pos[k])

}for(int i=0;icout

<" ";

return

0;}

CCF 201803 2 碰撞的小球

問題描述 提示因為所有小球的初始位置都為偶數,而且線段的長度為偶數,可以證明,不會有三個小球同時相撞,小球到達線段端點以及小球之間的碰撞時刻均為整數。同時也可以證明兩個小球發生碰撞的位置一定是整數 但不一定是偶數 輸入格式 輸入的第一行包含三個整數n,l,t,用空格分隔,分別表示小球的個數 線段長度...

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...

CCF 201803 2 碰撞的小球

問題描述 提示因為所有小球的初始位置都為偶數,而且線段的長度為偶數,可以證明,不會有三個小球同時相撞,小球到達線段端點以及小球之間的碰撞時刻均為整數。同時也可以證明兩個小球發生碰撞的位置一定是整數 但不一定是偶數 輸入格式 輸入的第一行包含三個整數n,l,t,用空格分隔,分別表示小球的個數 線段長度...