一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1A2...AN−1)变换为AN−M...AN−1A0A1A2...AN−M−1(最后M个数循环移至最前面的M个位置)。本题要求用指针实现。
输入格式:
第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。
输出格式:
输出一行,用%3d格式输出N个整数。
输入样例:
10 3
1 2 3 4 5 6 7 8 9 10
输出样例:
8 9 10 1 2 3 4 5 6 7
参考:
#include <stdio.h>
int main()
{
int n,m;
scanf("%d%d",&n,&m);
int a[n],*p=a;
int b[m],*q=b;
int i,t,j;
for(i=0; i<n; i++)
{
scanf("%d",&p[i]);
}
for(i=n-m,j=0; i<n; i++)
{
q[j]=p[i];
j++;
}
for(i=n-m-1; i>=0; i--)
{
p[i+m]=p[i];
}
for(i=0; i<m; i++)
{
p[i]=q[i];
}
for(i=0; i<n; i++)
{
printf("%3d",p[i]);
}
return 0;
}