CCF 201803 2 碰撞的小球

2021-08-24 18:03:40 字數 1334 閱讀 9878

問題描述

提示因為所有小球的初始位置都為偶數,而且線段的長度為偶數,可以證明,不會有三個小球同時相撞,小球到達線段端點以及小球之間的碰撞時刻均為整數。

同時也可以證明兩個小球發生碰撞的位置一定是整數(但不一定是偶數)。

輸入格式

輸入的第一行包含三個整數n, l, t,用空格分隔,分別表示小球的個數、線段長度和你需要計算t秒之後小球的位置。

第二行包含n個整數a1, a2, …, an,用空格分隔,表示初始時刻n個小球的位置。

輸出格式

輸出一行包含n個整數,用空格分隔,第i個整數代表初始時刻位於ai的小球,在t秒之後的位置。

樣例輸入

3 10 5

4 6 8

樣例輸出

7 9 9

解題思路

分兩種情況,乙個球時的情況,兩個及其以上個球時的情況。具體見注釋。

注意:首先用結構體儲存位置,包括index和value。對value排序,相應的index也跟著排序。最後輸出的時候對index排序,相應的value也跟著排序。然後輸出value即可。

**#include

#include

using namespace std;

void move(int pos, char dir, int n, int t, int l)a[105];

for (int i = 0; i < n; i++)

for (int i = 0; i < n-1; i++)}}

while (t--)

else

} else

else }} 

else  

else

}else if (dir[0] == 'l')

else }}

else if (i == n-1)

else  

}else if (dir[i] == 'l')

}else 

else

}else if (dir[i] == 'l')

}    //中間球(如果有的話)

}    //for迴圈 

}    //兩球及以上 

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

CCF 201803 2 碰撞的小球

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