1008. 数组元素循环右移问题

Posted Just_for_Myself

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1008. 数组元素循环右移问题相关的知识,希望对你有一定的参考价值。

题目截图:

 

思路:

  先将整个数组逆置,然后将数组前 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. 数组元素循环右移问题的主要内容,如果未能解决你的问题,请参考以下文章

PAT乙级 1008. 数组元素循环右移问题 (20)

1008 数组元素循环右移问题

PAT 乙级 水题 1008. 数组元素循环右移问题 (20)

1008. 数组元素循环右移问题 (20)

1008. 数组元素循环右移问题 (20) Java

1008. 数组元素循环右移问题 (20)