思路:
1. 用陣列 a[ i ][ j ] 記錄第 i 時刻第 j 個小球的位置,此處用的 i,j 編號均從零開始。
2. 用陣列 dir[ j ] 記錄第 j 個小球的方向,dir[ j ] == 1 或 dir[ j ] == -1 ,初始化為 1,因為小球初始時都向右移。
3. 如果小球相撞或碰到邊緣,就修改小球運動的方向,即令 dir[ j ] = - dir[ j ]。
4. 小球位置的迭代關係為 :
a[i][j] = a[i-1][j] + dir[j] (i=1,2,...,t)
最終的 a[ t ][ j ] (j = 0, 1, 2 , …, n-1)就是結果了.
**如下:
#include
#include
using
namespace
std;
int main()
for(int j=0; jcout
<" ";
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 碰撞的小球
問題描述 提示因為所有小球的初始位置都為偶數,而且線段的長度為偶數,可以證明,不會有三個小球同時相撞,小球到達線段端點以及小球之間的碰撞時刻均為整數。同時也可以證明兩個小球發生碰撞的位置一定是整數 但不一定是偶數 輸入格式 輸入的第一行包含三個整數n,l,t,用空格分隔,分別表示小球的個數 線段長度...