輸入格式:輸入的第一行包含三個整數n, l, t,用空格分隔,分別表示小球的個數、線段長度和你需要計算t秒之後小球的位置。第二行包含n個整數a1, a2, …, an,用空格分隔,表示初始時刻n個小球的位置。
輸出格式:輸出一行包含n個整數,用空格分隔,第i個整數代表初始時刻位於ai的小球,在t秒之後的位置。
樣例輸入
3 10 5
4 6 8
樣例輸出
7 9 9
思路:建立乙個長為n全為1的列表dir(可以理解為球滾動的方向),有兩種情況:1.當位置為l或者為0時,使相對應的方向變成相反的方向。2.當各個球的位置數不止乙個時,說明有兩個球滾到一起了,把這兩個球的方向都改一下,如1變成-1。最後使用到zip函式,將球的位置與對應的dir[i]相加,即不斷的加一或減一。
**:
n,l,t=map(int,input().split())
a=list(map(int,input().split()))
dir=[1]*n
for i in range(t):
for j in range(n):
if a[j]==l or a[j]==0:
dir[j]=-dir[j]
if a.count(a[j])!=1:
dir[j]=-dir[j]
a=[i+j for i,j in zip(a,dir)]
for i in a:
print(i,end=' ')
我自己是沒有想到的這樣解題的,做題的時候限於題目給的樣例,樣例執行是對的,但得分是0分。上述**也是參考網上的,網上**很多,有的很長很長,看到這個參考覺得很棒。(闊以的人,ccf 201803-2 碰撞的小球(python100分))。一是利用dir列表記錄球滾動方向,二是利用count()函式判斷是否有位置重疊,三是使用zip函式將列表a和dir對應的元素組成元組,將其各自相加。 ccf小球碰撞Python實現
輸入的第一行包含三個整數n,l,t,用空格分隔,分別表示小球的個數 線段長度和你需要計算t秒之後小球的位置。第二行包含n個整數a1,a2,an,用空格分隔,表示初始時刻n個小球的位置。輸出一行包含n個整數,用空格分隔,第i個整數代表初始時刻位於ai的小球,在t秒之後的位置。樣例輸入 3 10 5 4...
CCF 碰撞的小球
201803 2 碰撞的小球 時間限制 1.0s 記憶體限制 256.0mb 問題描述 因為所有小球的初始位置都為偶數,而且線段的長度為偶數,可以證明,不會有三個小球同時相撞,小球到達線段端點以及小球之間的碰撞時刻均為整數。同時也可以證明兩個小球發生碰撞的位置一定是整數 但不一定是偶數 輸入格式 輸...
CCF碰撞的小球(201803 2)
題解 模擬每一秒鐘的變化即可,模擬每一次時都要預先去判斷當前有沒有兩個小球以及相遇並且方向相反,若相遇了,則需要將它的方向改變一下,變為相反的方向,然後再對每個小球進行加1操作,分情況討論 1 朝右走,沒有走到頭,則直接 走到頭的話,則方向變為 1,位置 2 朝左走,沒有到達起點,則直接 到達起點的...