本题是一道小模拟

规模小

难度在碰撞检测

在写模拟题时的思路应该是先找到应该储存的信息是哪些,抽象出来,应该模拟的方法是哪些。类似oop。

include

using namespace std;

const int L = 1000;
struct ball{
int p;
char d=1; //只可能为1或-1,表示方向
}b[L+1];

int main()
{
int n, l, t, i, j, k;
cin >> n >> l >> t;
for(int i = 0; i < n; i++)
cin >> b[i].p;

for( i = 0; i < t; i++) {
	//模拟每一秒
    for(int j = 0; j < n; j++) {
        b[j].p += b[j].d;
        if(b[j].p == l || b[j].p == 0)
            b[j].d = -b[j].d;
    }//先走后检测

    for( j = 0; j < n; j++)//碰撞检测
        for( k = j + 1; k < n; k++)
            if(b[k].p == b[j].p)
                b[k].d=-b[k].d, b[j].d = -b[j].d;
}

for(int i = 0; i < n; i++)
    cout << b[i].p << " ";
cout << endl;

return 0;

}