7-52 数组元素循环右移问题(20 分)
一个数组AA中存有(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移MM(≥0)个位置,即将中的数据由(A0A1⋯AN−1A0A1⋯AN−1)变换为(AN−M⋯AN−1A0A1⋯AN−M−1AN−M⋯AN−1A0A1⋯AN−M−1)(最后MM个数循环移至最前面的个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
输入格式:
每个输入包含一个测试用例,第1行输入NN(1≤≤100)和MM(≥0);第2行输入个整数,之间用空格分隔。
输出格式:
在一行中输出循环右移MM位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
输入样例:
6 2
1 2 3 4 5 6
输出样例:
5 6 1 2 3 4
#include <stdio.h>
#define MAXN 100
int main(void) {
int n, m, num[MAXN * 2], i, temp;
scanf("%d %d", &n, &m);
for (i = 0; i < n; i++) {
scanf("%d", &num[i]);
}
m %= n;
for (i = n + m - 1; i > m - 1; i--) {
num[i] = num[i - m];
}
for (i = 0; i <= m - 1; i++) {
num[i] = num[n + i];
}
for (i = 0; i < n; i++) {
if (i == 0) {
printf("%d", num[i]);
}
else {
printf(" %d", num[i]);
}
}
printf("\n");
return 0;
}