本题有两种思路:
1:建一个结构体模拟小球的编号,实时位置,运行方向,模拟运动,在检查是否碰撞时只用检查相邻小球即可,因为小球始终夹在两球中间跑。
2:既然小球碰撞后方向相反,且速度不变,相当于小球只是相互摩擦一下接着沿当前方向运行。 小球开始的位置顺序与最后的位置顺序的大小顺序是一样的,即开始时a1,a2,a3分别位于6,4,8(a2>a1>a3),假如最终位置是5,2,7,那么a1,a2,a3的位置分别是5,2,7,依旧是a2>a1>a3. 这是因为他们始终在自己相邻的两颗球之间跑,所以可以简化为这个思路。 所以只需要用数组记录开始的大小位置,最后把小球位置按此排序输出即可。
代码明天上。
思路1代码:满分
#include <iostream>
#include <algorithm>
using namespace std;
struct Ball
{
int pos;//position
int id;//
int dir;//direction right=1 ,left=-1;
};
bool cmp1(Ball a, Ball b)
{
return a.pos<b.pos;
}
bool cmp2(Ball a, Ball b)
{
return a.id<b.id;
}
int main()
{
int num, len, time, i, j;
cin>>num>>len>>time;
Ball ball[100];
for(i=0;i<num;i++)
{
cin>>ball[i].pos;
ball[i].dir=1;
ball[i].id=i+1;
if(ball[i].pos==len)
ball[i].dir=-1;
}
/