这道题不要想麻烦了,因为小球的数量不一定,而且题目说同时只能两个小球碰撞,并且都放在偶数的地方,我们只研究相邻的两个小球就好
#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;
struct loca {
int loc;//位置
int dir;//方向
};
int main()
{
int n, L, t;
cin >> n >> L >> t;
vector<loca>arr;//切记这里不是arr(n)
loca pos;
for (int m = 0; m < n; m++)
{
cin >> pos.loc;
pos.dir = 1;//开始的方向都是向右,我们先标定一个方向
arr.push_back(pos);
}
while (t--) {
for (int i = 0; i < n; i++) {
if (arr[i].loc == 0 || arr[i].loc == L) {
arr[i].dir *= -1;//如果碰到两边了那就相反方向
}
arr[i].loc += arr[i].dir;//因为速度是1/m,所以可以加
//此步骤是每一秒算一下如果没碰撞,小球各自在哪里,然后下一个二重循环就是判断有没有碰撞
}
for (int j = 0; j < n; j++) {
for (int k = j + 1; k < n; k++) {
if (arr[j].loc == arr[k].loc) {
arr[j].dir *= -1;
arr[k].dir *= -1;
}
}
}
}
for (int i = 0; i < n; ++i) {
cout << arr[i].loc << ' ';
}
return 0;
}