在此有忧无乐之中,须寻一无忧之乐
第一没有考虑:若移动的位数大于总数的个数,比如说有6的数字,向右移动8个位置,实际就是移动(8%6)= 2 个位置;
#include <stdio.h>
#define MAX_N 100 /* 数组所存个数 */
void get_array(int s[], int lim){
int i;
for(i = 0; i < lim; ++i)
scanf("%d", &s[i]);
}
/* 将数组s[]从left到right之间元素翻转 */
void revers(int s[], int left, int right){
int temp;
while(left < right){
temp = s[left];
s[left] = s[right];
s[right] = temp;
++left;
--right;
}
}
void print_array(int s[], int lim){
int i;
for(i = 0; i < lim; ++i){
if(i < lim-1)
printf("%d ", s[i]);
else
printf("%d", s[i]);
}
}
int main(){
int N, M;
int array[MAX_N] = {0};
scanf("%d %d", &N, &M);
get_array(array, N);
if(M > N) /* 若移动的位置大于个数总和 */
M %= N;
revers(array, 0, N-M-1);
revers(array, N-M, N-1);
revers(array, 0, N-1);
print_array(array, N);
}