题目
分析
设置一个二维数组,a[i][j],i存放第i个小球,j为小球运动的方向,1为右移,0为左移,初始化为1。运行时间为t,遍历t次,记录每一次小球的位置和运动方向。当小球在终点,则改变方向为0,然后左移;当小球在0点时,改变方向为1,然后右移。不在0点或终点的小球移动一次。所有小球运动一次之后,遍历所有的小球,当前小球与其他小球比较,如果有其他小球与其在同一位置,则改变当前小球的运动方向。
代码
#include<iostream>
using namespace std;
int main()
{
int n;
int len;
int t;
int a[1024][2];
cin >> n >> len >> t;
for (int i = 0; i < n; i++)
{
cin >> a[i][0];
a[i][1] = 1;
}
for (int i = 0; i < t; i++)
{
for (int j = 0; j < n; j++)
{
if (a[j][0] == len)
{
a[j][1] = 0;
a[j][0]--;
}
else if (a[j][0] == 0)
{
a[j][1] = 1;
a[j][0]++;
}
else {
if (a[j][1] == 1)
{
a[j][0]++;
}
else
{
a[j][0]--;
}
}
}
for (int j = 0; j < n; j++)
{
for (int h = 0; h < n; h++)
{
if (j != h)
{
if (a[j][0] == a[h][0])
{
if (a[j][1] == 0)
{
a[j][1] = 1;
}
else
{
a[j][1] = 0;
}
}
}
}
}
}
for (int i = 0; i < n; i++)
{
cout << a[i][0]<<" ";
}
//system("pause");
return 0;
}