1. 程式人生 > >1008. 數組元素循環右移問題

1008. 數組元素循環右移問題

alt class 逆置數組 lag ret spa ++ return amp

題目截圖:

技術分享圖片

思路:

  先將整個數組逆置,然後將數組前 M 個元素和後面的元素分別逆置即可。

代碼:

 1 /*
 2     1008. 數組元素循環右移問題
 3 */
 4 
 5 #include <stdio.h>
 6 #include <string.h>
 7 #include <math.h>
 8 #include <stdlib.h>
 9 #include <time.h>
10 
11 #define maxn 101
12 int p[maxn] = {0};
13 
14 // 逆置 
15 void swap(int
a, int b) { 16 int i; 17 for(i=a; i<=(a+b)/2; ++i) { 18 int temp = p[i]; 19 p[i] = p[a+b-i]; 20 p[a+b-i] = temp; 21 } 22 } 23 24 int main() { 25 int N, M, i, flag=0; 26 scanf("%d %d", &N, &M); 27 M %= N; // M 可能大於 N 28 for
(i=0; i<N; ++i) { 29 scanf("%d", &p[i]); 30 } 31 if(M != 0) { // M 為 0 不需要移動 32 swap(0, N-1); // 逆置整個數組 33 swap(0, M-1); // 逆置數組前 M 個元素 34 swap(M, N-1); // 逆置數組後面元素 35 } 36 for(i=0; i<N; ++i) { // 按格式輸出 37 if(flag) {
38 printf(" "); 39 } 40 printf("%d", p[i]); 41 flag = 1; 42 } 43 44 return 0; 45 }

1008. 數組元素循環右移問題