问题描述
思路
根据题目要求对于小球的每次移动判断小球的位置是否发生碰撞,若碰撞改变小球的运动方向,根据小球的运动方向对小球的位置进行移动即可。
代码
#include<iostream>
#include<vector>
using namespace std;
struct ball
{
int position;
bool direction=true;//向右
void move()
{
if(direction)
position++;
else
position--;
}
};
int main()
{
int n,L,t;
cin>>n>>L>>t;
vector<ball> vec;
for(int i=0;i<n;i++)
{
int a;
cin>>a;
ball b;
b.position=a;
vec.push_back(b);
}
while(t>0)
{
for(int i=0;i<n;i++)
vec[i].move();
for(int i=0;i<n;i++)
{
if(vec[i].position==L)
vec[i].direction=false;
if(vec[i].position==0)
vec[i].direction=true;
for(int j=i;j<n;j++)
{
if(vec[i].position==vec[j].position&&i!=j)
{
vec[i].direction=!vec[i].direction;
vec[j].direction=!vec[j].direction;
break;
}
}
}
t--;
}
for(int i=0;i<n;i++)
cout<<vec[i].position<<" ";
return 0;
}