先放一个代码在这,如果有时间再来写写思路吧
#include<bits/stdc++.h>
using namespace std;
struct node{
int position;
int direction=1;//初始时小球的方向都为1
}ball[100];
int n,l,t;//小球、长度、时间
void getPosition(node&b);
void changeDirection();
int main()
{
ios::sync_with_stdio(false);
cin>>n>>l>>t;
//输入小球的初始坐标
for(int i=0;i<n;i++)
{
cin>>ball[i].position;
}
//开始计时
for(int i=0;i<t;i++)
{
//每个小球移动一次
for(int j=0;j<n;j++)
getPosition(ball[j]);
changeDirection();//查看是否碰撞
}
//输出小球最后位置
for(int i=0;i<n;i++)
{
cout<<ball[i].position;
if(i!=n-1)cout<<" ";
}
cout<<"\n";
return 0;
}
void getPosition(node& b)
{
if(b.direction==1)//向右
{
b.position+=1;
if(b.position==l)//如果此时该小球已经运动到最右端,则方向改变
b.direction=-1;
return;
}
if(b.direction==-1)
{
b.position-=1;
if(b.position==0)//如果此时该小球已经运动到最左端,方向改变
b.direction=1;
return;
}
}
void changeDirection()
{
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(ball[i].position==ball[j].position)
{
ball[i].direction=0-ball[i].direction;
ball[j].direction=0-ball[j].direction;
}
}
}
}