zoukankan      html  css  js  c++  java
  • PAT 1008. 数组元素循环右移问题 (20)

    一个数组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
    最简单的方法,直接打印。
     1 #include<stdio.h>
     2 #include<string.h>
     3 int main(){
     4     int n,m;
     5     scanf("%d %d",&n,&m);
     6     int a[200];
     7     int k = 1;
     8     for(int i=0;i<n;i++){
     9         scanf("%d",&a[i]);
    10     }
    11     m = m%n;
    12     for(int i=n-m;i<n;i++){
    13         if(k){
    14             printf("%d",a[i]);
    15             k = 0;
    16         }
    17         else
    18             printf(" %d",a[i]);
    19     }
    20     for(int i=0;i<n-m;i++){
    21         if(k){
    22             printf("%d",a[i]);
    23             k = 0;
    24         }
    25         else
    26             printf(" %d",a[i]);
    27     }
    28     
    29 
    30     
    31 }
    32      

    每次使末尾元素移动到初始位置,递归

     1 #include<stdio.h>
     2 #include<string.h>
     3 int n,m;
     4 
     5 void move(int a[],int k){
     6     if(k){
     7         int temp = a[n-1];
     8         for(int i=0;i<n-1;i++){
     9             a[n-1-i] = a[n-2-i];
    10         }
    11         a[0] = temp;
    12         move(a,k-1);
    13     }
    14     
    15 }
    16 
    17 int main(){
    18     scanf("%d %d",&n,&m);
    19     int a[200];
    20     for(int i=0;i<n;i++){
    21         scanf("%d",&a[i]);
    22     }
    23     m = m%n;
    24     move(a,m);
    25     for(int i=0;i<n;i++){
    26         if(!i)
    27             printf("%d",a[i]);
    28         else
    29             printf(" %d",a[i]);
    30     }
    31     
    32 
    33     
    34 }
    35      
  • 相关阅读:
    【今日CV 视觉论文速览】 19 Nov 2018
    【numpy求和】numpy.sum()求和
    【今日CV 视觉论文速览】16 Nov 2018
    【今日CV 视觉论文速览】15 Nov 2018
    poj 2454 Jersey Politics 随机化
    poj 3318 Matrix Multiplication 随机化算法
    hdu 3400 Line belt 三分法
    poj 3301 Texas Trip 三分法
    poj 2976 Dropping tests 0/1分数规划
    poj 3440 Coin Toss 概率问题
  • 原文地址:https://www.cnblogs.com/lolybj/p/6171490.html
Copyright © 2011-2022 走看看