思路
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;
}
该博客介绍了如何使用C语言解决CCF中关于小球碰撞的问题。通过数组a[]表示小球编号,flag[]定义小球运动方向,判断位置相同进行相撞处理,以及到达边界时改变方向。
4369

被折叠的 条评论
为什么被折叠?



