试题编号: 201803-2
试题名称: 碰撞的小球
#include <iostream>
#define _for(i,a,b) for(int i=a;i<b;i++)
int main() {
int num; //小球个数num
int loadLength; //路程长度loadLength
int t; //需要计算t秒之后小球的位置
scanf("%d %d %d",&num,&loadLength,&t);
int firstLocation[num]; //各个小球的初始位置
int velocity[num]; //存储速度 (规定向右为正)
//输入各个小球的初始位置
for(int i=0;i<num;i++){
scanf("%d",&firstLocation[i]);
velocity[i]=1; //设置速度为1 (规定向右为正)
}
//在规定时间t内小球变化
while(t>0){
//依次循环小球的个数
_for(i,0,num){
firstLocation[i]+=velocity[i];
if(firstLocation[i]==loadLength||firstLocation[i]==0){ //小球的位置碰到边界
velocity[i]=(-1)*velocity[i];
}
//考虑两球相撞反弹
_for(j,0,num){
if(i!=j&&firstLocation[i]==firstLocation[j]){
velocity[i]=(-1)*velocity[i];
velocity[j]=(-1)*velocity[j];
}
}
}
t--;
}
_for(i,0,num){
printf("%d ",firstLocation[i]);
}
return 0;
}