思路:用a[n+1]存放编号,遍历找到要调动的编号后,按照条件依次前移后移编号就可。d的正负一个模式处理,只是要区分向前向后。注意,a[j+q]=p;
而不可以a[j+q]=a[j];
因为a[j]已经变化了。
#include <iostream>
using namespace std;
int main()
{
int n,m;
int p,q;
cin >> n >> m;
int a[n];
for(int i=0;i<n;i++) a[i]=i+1;
for(int i=0;i<m;i++)
{
cin >> p >> q;
for(int j=0;j<n;j++)
{
if(a[j]==p)
{
if(q>0)
{
for(int k=j;k<j+q;k++)
{
a[k]=a[k+1];
}
a[j+q]=p;
}
else if(q<0)
{
for(int k=j;k>j+q;k--)
{
a[k]=a[k-1];
}
a[j+q]=p;
}
break;
}
}
}
for(int i=0;i<n;i++)
cout << a[i] << " ";
return 0;
}
测试数据:
8
3
3 2
8 -3
3 -2