查看: 644|回复: 0

PAT乙级真题1008. 数组元素循环右移问题 (20)(2016-4-27))

[复制链接]
  • TA的每日心情
    开心
    2016-8-13 12:47
  • 签到天数: 132 天

    [LV.7]常住居民III

    参加活动: 0

    组织活动: 0

    发表于 2016-4-27 08:51:51 | 显示全部楼层 |阅读模式
    本帖最后由 fengyu_wollon 于 2016-5-8 01:00 编辑

    原题:
    1008. 数组元素循环右移问题 (20)
    时间限制
    400 ms
    内存限制
    65536 kB
    一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1……AN-1)变换为(AN-M …… AN-1 A0 A1……AN-M-1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

    输入格式:每个输入包含一个测试用例,第1行输入N ( 1<=N<=100)、M(M>=0);第2行输入N个整数,之间用空格分隔。
    输出格式:在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
    输入样例:
    6 2
    1 2 3 4 5 6
    输出样例:
    5 6 1 2 3 4


    code:
    1. #include<stdio.h>
    2. #include<malloc.h>
    3. int main()
    4. {
    5.   int N=0,M=0,temp1=0,temp2=0,i=0,j=0;
    6.   int *A;
    7.   scanf("%d %d",&N,&M);
    8.   A=(int *)malloc(N*sizeof(int));
    9.   for(i=0;i<N;i++)
    10.         scanf("%d",&A[i]);
    11.   for(i=0;i<M;i++)
    12.     {
    13.         for(temp1=A[0],j=0;j<N;j++)//把前一位赋给后一位,最后一位赋给第一位         
    14.         {
    15.             if(j==N-1)
    16.             {
    17.                 A[0]=temp1;
    18.                 break;
    19.             }
    20.             temp2=A[j+1];
    21.             A[j+1]=temp1;
    22.             temp1=temp2;
    23.         }
    24.     }
    25.   for (int i = 0; i < N; i++)
    26.     printf("%d%s", A[i], (i-N+1?" ":"\n"));
    27.     return 0;
    28. }
    复制代码

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    小黑屋|手机版|Archiver|空中社区  

    GMT+8, 2017-11-21 04:49 , Processed in 0.093763 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表