在练习到此题的时候,没想到什么方法,在网上找了一下,看到了文末的那篇文章,受益匪浅,非常感谢。于是把这次提交的代码记录下来。
#include<iostream>
using namespace std;
#define L 1000
int main()
{
int n,l,t;//输入参数 小球个数n,数轴长度l,时间t
int a[L],b[L]; //各小球初始位置数组a,移动步数及方向数组b
cin>>n>>l>>t;
for(int i=0;i<n;i++)
{
cin>>a[i];
b[i]=1;
}
for(int i=0;i<t;i++)
{
//检查移动位置
for(int j=0;j<n;j++)
{
if(a[j]==0||a[j]==l)
{
b[j]=-b[j];
}
a[j]+=b[j];
}
//发生碰撞
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(a[i]==a[j])
b[j]=-b[j],b[i]=-b[i];
}
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
本文参考以下文章代码,如有侵权,请联系删除
原文链接:https://blog.youkuaiyun.com/tigerisland45/article/details/81660041