本题的关键在两小球碰撞后改变方向,注意演算和理解
#include<iostream>
using namespace std;
struct ball{
int add;
int flag;
};
int main(){
int i,j;
int n,l,t;
cin>>n>>l>>t;
ball ba[n];
for( i=0;i<n;i++){ //初始化
cin>>ba[i].add;
ba[i].flag=0;//0是往右 1是往左
}
while(t>0){
for(i=0;i<n;i++){
if(ba[i].flag==0){
int a=++ba[i].add;
if(a==l){
ba[i].flag=1;
}
}
else{
int a=--ba[i].add;
if(a==0){
ba[i].flag=0;
}
}
}
for(i=0;i<n;i++){ //两小球碰撞改变方向
for(j=i+1;j<n&&j!=i;j++){
if(ba[i].add==ba[j].add){
int temp=ba[i].flag;
ba[i].flag=ba[j].flag;
ba[j].flag=temp;
}
}
}
t--;
}
for(int i=0;i<n;i++){
cout<<ba[i].add<<" ";
}
return 0;
}