解题思路:
1.学生向后移动或者先前移动,本质上就是该位置和前一个或者后一个位置交换学生学号
2.使用简单的交换即可
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int m;
cin>>m;
int num[1005]; //每个位置的学生学号
for(int i=1;i<=n;i++)
{
num[i]=i; //初始时每个位置是相应学号学生
}
while(m--)
{
int numt,op;
cin>>numt>>op;
int t; //该学号学生当前的位置
for(int i=1;i<=n;i++)
{
if(num[i]==numt)
{
t=i; //找到该学生位置
break;
}
}
if(op>0) //向后移动
{
while(op--)
{
int tt=num[t];
num[t]=num[t+1];
num[t+1]=tt; //交换和后面一个人的学号
t=t+1; //更新位置
}
}
else //向前移动
{
op=op*(-1);
while(op--)
{
int tt=num[t];
num[t]=num[t-1];
num[t-1]=tt; //换和前面一个人的学号
t=t-1; //更新位置
}
}
}
for(int i=1;i<=n;i++) cout<<num[i]<<' ';
}