思路
这种题目主要考察的是对与给定实体进行描述的能力,一般可用结构体来描述。通过题目可知需要描述的小球属性分别为小球的位置与小球的方向。当发生碰撞时我们只需要将小球的方向改变即可。
代码如下:
#include <iostream>
using namespace std;
struct xiaoqiu
{
int weizhi;
int fangxing;
};
int main(int argc, char** argv) {
int n,l,t;
cin>>n>>l>>t;
xiaoqiu qiu[n];
for(int i=0;i<n;i++)
{
cin>>qiu[i].weizhi;
qiu[i].fangxing=1;
}
for(int i=0;i<t;i++)
{
for(int j=0;j<n;j++)//更新方向
{
if(qiu[j].weizhi==0||qiu[j].weizhi==l)//遇到边界
{
qiu[j].fangxing=-qiu[j].fangxing;
}
for(int k=0;k<n;k++)//小球相撞
{
if(qiu[k].weizhi==qiu[j].weizhi&&k!=j)
{
qiu[k].fangxing=-qiu[k].fangxing;//将碰撞小球方向调转
}
}
}
for(int s=0;s<n;s++)//更新位置
{
qiu[s].weizhi+=qiu[s].fangxing;
}
}
for(int i=0;i<n;i++)
{
if(i!=0)
{
cout<<" ";
}
cout<<qiu[i].weizhi;
}
return 0;
}
有什么不懂的地方可以留在评论区。