题目描述
http://118.190.20.162/view.page?gpid=T72
模拟线段上小球的碰撞情况(碰墙和碰球)
题目分析
- 不碰撞的时候小球每次向右一个单位
- 碰墙的时候小球方向变反
- 碰其他球的时候,两个小球的方向会相反
- 我的基本思路是利用flag确定小球的方向,每次相撞改变方向,所以每秒都要检测一次,所有小球有没有两个坐标相同的(即需要同时改变这两个小球的方向)
代码
#include <iostream>
using namespace std;
int balls[100];
bool flag[100];
int main() {
freopen("in.txt","r",stdin);
int n,len,t;
cin>>n>>len>>t;
for(int i=1;i<=n;i++){
cin>>balls[i];
flag[i]=true;
}
while(t--){
for(int i=1;i<=n;i++){
if(balls[i]==len||balls[i]==0){
flag[i]=!flag[i];
}
balls[i]+=flag[i]?1:-1;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n&&j!=i;j++){
if(balls[i]==balls[j]){
flag[i]=!flag[i];
flag[j]=!flag[j];
}
}
}
}
for(int i=1;i<=n;i++){
cout<<balls[i]<<" ";
}
return 0;
}