此道题目采用一维数组和结构体来解。
#include<iostream>
using namespace std;
int main()
{
int n,m,m1,m2;
struct S//以每个位置设置结构体
{
int d;//每个位置上学生的学号
};
struct S s[1001];
cin>>n>>m;
for(int i=1;i<=n;i++)
{
s[i].d=i;//最初每个学生按照学号排位置
}
while(m--)
{
cin>>m1>>m2;//m1,m2分别为每次排队选取的学生学号和移动的大小
int p,q;
for(int i=1;i<=n;i++)
{
if(s[i].d==m1)
q=i;
}
if(m2>0)
{
p=m2;
while(p--)
{
s[q].d=s[q+1].d;//把需要移动的学生依次移位
q++;
}
}
if(m2<=0)
{
p=-m2;
while(p--)
{
s[q].d=s[q-1].d;
q--;
}
}
s[q].d=m1;
}
for(int i=1;i<n;i++)
{
cout<<s[i].d<<" ";
}
cout<<s[n].d<<endl;
}