题目描述
思路分析
按照题意,直接模拟进出队列过程即可,每次移动,只会涉及到k个人。
代码
#include<stdio.h>
int main()
{ int n,k,f,temp;//i,j,f均为循环变量
scanf("%d",&n);
int i = 0;
int stu[n];
//int stu[n] = {0};初始化stu[n]为全0提交编译出错,不知道为什么
//初始化学生排队队列
for(; i<n; i++)
{
stu[i]=i+1;
}
//输入移动学生学号&移动信息
scanf("%d",&k);
int move[k][2];
for(i=0;i<k;i++)
{
scanf("%d %d",&move[i][0],&move[i][1]);
}
//模拟每次移动
int j = 0;
for(; j<k;j++)
{
i=0;
//找待移动的学生位置在队列哪
while(move[j][0] != stu[i])
{
i++;
}
f=0;
//学生后移的情况
if(move[j][1]>0)
{
//后移
for(;f<move[j][1];f++)
{
temp = stu[i+f];
stu[i+f] = stu[i+f+1];
stu[i+f+1] = temp;
}
}
//学生前移的情况
if(move[j][1]<0)
{
for(;f>move[j][1];f--)
{
temp = stu[i+f];
stu[i+f] = stu[i+f-1];
stu[i+f-1] = temp;
}
}
}
for(i=0;i<n-1;i++)
{
printf("%d ",stu[i]);
}
printf("%d ",stu[n-1]);
return 0;
}