这个题考虑到排序问题,有两种思路:
1.不排序,遇边界改变方向,暴力按时间走一秒比较与其他球的位置以确定下一秒的方向;
2.排序,遇边界改变方向只需要比较与相邻球的位置即可。
第一种方法代码入下:
#include <stdio.h>
#define N 101
int pos[N];
int der[N];
int main()
{
int n,l,t,i,j;
scanf("%d%d%d",&n,&l,&t);
for(i=0;i<n;i++){
scanf("%d",&pos[i]);
der[i]=1;
if(pos[i]==0||pos[i]==l)
der[i]*=-1;
}
while(t--){
for(i=0;i<n;i++){
pos[i]+=der[i]; //移动位置
if(pos[i]==0||pos[i]==l)//遇边界改变方向
der[i]*=-1;
}
//两球相撞改变方向
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(pos[i]==pos[j]){
der[i]*=-1;
der[j]*=-1;
}
}
printf("%d",pos[0]);
for(i=1;i<n;i++)
printf(" %d",pos[i]);
return 0;
}