码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-02-25 19:10:04      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:inf   gpo   can   def   scan   alt   time   ring   ++   

题目截图:

技术分享图片

 

思路:

  先将整个数组逆置,然后将数组前 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. 数组元素循环右移问题

标签:inf   gpo   can   def   scan   alt   time   ring   ++   

原文地址:https://www.cnblogs.com/coderJiebao/p/PAT1008.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!