分析:
首先定义一个数组存储学生排列状况,然后对于每一次调整,利用Move函数将调整反应到数组中,定义一个变量作为方向(-1前移,1后移),利用for循环实现移动即可。
#include <stdio.h>
#include <math.h>
int Move(int a[],int n,int p,int q){
int i,j,direction;
for(i=1;i<=n;i++){
if(a[i]==p){
direction=q/abs(q);//-1前移,1后移
for(j=0;j<abs(q);j++){
a[j*direction+i]=a[(j+1)*direction+i];
}
a[j*direction+i]=p;
break;
}
}
}
int main(){
int n,m,i,p,q;
scanf("%d%d",&n,&m);
int *a;
a=(int *)calloc(n+1,sizeof(int));
for(i=1;i<=n;i++){
a[i]=i;
}
for(i=0;i<m;i++){
scanf("%d%d",&p,&q);
Move(a,n,p,q);
}
for(i=1;i<=n;i++)
printf("%d ",a[i]);
return 0;
}