题目描述
算法设计+题目分析
分析题目:
1、读入所有数据,初试化每个小球的位置、方向、是否改变过方向;
2、在每一秒,先判断小球的方向是否发生了变化,如果发生了变化,就重置小球的方向(变化条件是:触边、碰撞);
3、根据当前的所有小球的参数,走一步;
4、循环2、3至时间结束;
5、打印所有小球的位置。
注意点+记录点
无
代码(100分)
环境
Visual C++6.0
#include <iostream>
using namespace std;
int pos[101][3];
int main()
{
int n, L, T;
cin>>n;//小球数目
cin>>L;//线段长度
cin>>T;//要求的时间
for (int i=0; i<n; i++)
{
cin>>pos[i][0];//小球位置
pos[i][1]=1;//小球方向
pos[i][2]=0;//flag,使得只存在两个小球相撞,小球每一步只改变一次运动方向
}
for (int t=0; t<T; t++)
{
for (int i=0; i<n; i++)
{
if (pos[i][0]==L || (pos[i][0]==0 && t != 0))//到了边界,小球反向运动
{
pos[i][1]=-1*pos[i][1];
}
for (int j=i; j<n; j++)
{
if (pos[i][0]==pos[j][0])//判断是否有小球相撞,同时只允许小球改变一次运动方向
{
if (pos[i][2]==0)
{
pos[i][2]==1;
pos[i][1]=-1*pos[i][1];
}
if (pos[j][2]==0)
{
pos[j][2]==1;
pos[j][1]=-1*pos[i][1];
}
}
}
}
for (int iii=0; iii<n; iii++)//所有小球运动一步
{
pos[iii][0] +=pos[iii][1];
pos[iii][2]==0;
}
}
for (int ii=0; ii<n; ii++)
{
cout<<pos[ii][0]<<" ";
}
return 0;
}
感谢链接
无