#include<stdio.h>
int main()
{
int n, L, t;
scanf("%d%d%d", &n, &L, &t);
int b[100] = {0}, fx[100] = {0};// 1 to right; -1 to left;
for(int i = 0; i < n; i++)
{
scanf("%d", &b[i]);
fx[i] = 1;// initialize the direction;
}
while(t)
{
for(int i = 0; i < n - 1; i++)
{
if(b[i] == 0 || b[i] == L)
fx[i] *= -1;// the ball reaches boundary;
for(int j = i + 1; j < n; j++)// 因为需要按原来插入数组的顺序输出碰撞后的结果,
// 所以当讨论小球是否发生碰撞时需要遍历数组。
if(b[i] == b[j] && fx[i] * fx[j] == -1)
{
fx[i] *= -1;
fx[j] *= -1;
}// the balls collide; fx[i] * fx[j] == -1加不加均可,因为当其乘积为 1 时不可能相碰。
}
for(int i = 0; i < n; i++)
b[i] += fx[i];
t--;
}
for(int i = 0; i < n; i++)
printf("%d ", b[i]);
return 0;
}
CCF认证-201803-碰撞的小球-C语言代码实现(100分)
最新推荐文章于 2021-05-23 04:39:50 发布