思路
1.用数组a[]下标当小球编号
2.用flag[]数组定义方向,1为向右,-1为向左
3.位置相同则相撞,令flag相反
4.到达顶端,令flag相反
源代码 (C语言)
#include <stdio.h>
int main()
{
int n,L,t;
scanf("%d %d %d",&n,&L,&t);
int flag[110];//1是向右,-1是向左
int a[110];
int i,j,p,q,x;
for(i=1;i<=n;i++)//下标是球号
{
scanf("%d",&a[i]);
if(a[i]==L)
{
flag[i]=-1;
}
else
{
flag[i]=1;
}
}
for(i=1;i<=t;i++)//时间
{
for(j=1;j<=n;j++)
{
if(flag[j]==1)//向右
{
a[j]=a[j]+1;
}
else
{
a[j]=a[j]-1;//向左
}
}
for(p=1;p<=n;p++)//相撞,位置相同 flag相反
{
for(q=1;q<=n;q++)
{
if(a[p]==a[q]&&p!=q)
{
flag[p]=-flag[p];
}
}
}
for(x=1;x<=n;x++)//到达顶端 ,flag相反
{
if(a[x]==0||a[x]==L)
{
flag[x]=-flag[x];
}
}
}
for(i=1;i<=n;i++)
{
printf("%d ",a[i]);
}
return 0;
}