ccf 201803 2 碰撞的小球

2021-10-05 01:33:14 字數 960 閱讀 5289

問題描述

我是用結構體來儲存小球當前位置以及它的運動方向,初始化方向為向右。然後設定了乙個陣列ans,用來存放每個座標上是否有小球,如果該位置上有小球則置為1,否則置為0;小球開始運動,雖然題目上是說同時動,但其實我們微觀上並做不到「同時」,只能做到巨集觀上的「同時」;因此我是讓位置處在後面的小球先進行移動,這樣就不會有問題。

因為開始小球的位置是,4 5 6 ,從第乙個小球開始移動的話,當4號小球到達5號的時候,5號小球在微觀上還未移動,就會造成4號小球以為碰撞傳送,而朝反方向移動,造成錯誤移動。

我是通過他的方向來判斷它是往左還是往右移動,移動的時候需要注意的是:

這兩點考慮到了就沒什麼大問題了。

**如下:

//碰撞的小球

#include

#include

#include

using

namespace std;

typedef

struct ballball;

intmain()

while

(t--

)else

if(p+

1<= l && ans[p+1]

==1)}

}if(b.pos == l)

}//如果方向想左

else

else

if(p-

1>=

0&& ans[p-1]

==1)}

}if(b.pos ==0)

} bal[i]

.pos = b.pos;

bal[i]

.direction = b.direction;}}

cout << bal[0]

.pos;

for(

int i=

1; i)return0;

}

ღ( ´・ᴗ・` )

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