PAT (Basic Level) Practice (中文) B1008 数组元素循环右移问题 (20 分)

简介: PAT (Basic Level) Practice (中文) B1008 数组元素循环右移问题 (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


分析


第一反应

循环右移动几个位置,就循环几次。

eg:1 2 3 4 5 6 循环两次

用一个临时变量temp保存最后一位数字

第一次循环 temp=6 之后 a[i+1]=a[i],最后将啊a[0]=temp; 得到的结果是 6 1 2 3 4 5

第二次循环 temp=5 之后 a[i+1]=a[i],最后将啊a[0]=temp; 得到的结果是 5 6 1 2 3 4


标准思路

先将N-M号元素到N-1号元素打印,之后将0号元素到N-M-1号元素打印


注意


题目中有很多限制条件,但是测试的时候只看结果,不看过程

要注意M没有上限,就是相当于有1 2 3 4 5 6 这一组数字,可以右移动10位,所以在最初的时候要修正M的值


个人代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n,m;
  scanf("%d %d",&n,&m);
  int a[100];
  for(int i=0;i<n;i++)
  {
    scanf("%d",&a[i]);
  }
    m=m%n;
  for(int i=0;i<m;i++)
  {
    int temp;
    temp=a[n-1];
    for(int i=n-1;i>=0;i--)
    {
      a[i]=a[i-1];
    }
    a[0]=temp; 
  }
  for(int i=0;i<n;i++)
  {
    printf("%d",a[i]);
    if(i<n-1)
    {
      printf(" ");
    }
  }
  return 0;
}

微信图片_20220927122933.png

相关文章
|
C语言 C++
PAT (Basic Level) Practice (中文)1099 性感素数(20分)
“性感素数”是指形如 (p, p+6) 这样的一对素数。之所以叫这个名字,是因为拉丁语管“六”叫“sex”(即英语的“性感”)。(原文摘自 http://mathworld.wolfram.com/SexyPrimes.html) 现给定一个整数,请你判断其是否为一个性感素数。
141 0
|
人工智能 算法
LeetCode 1347. 制造字母异位词的最小步骤数 Minimum Number of Steps to Make Two Strings Anagram
LeetCode 1347. 制造字母异位词的最小步骤数 Minimum Number of Steps to Make Two Strings Anagram
|
测试技术
PAT (Basic Level) Practice (中文)1012 数字分类 (20 分)+易错测试点
PAT (Basic Level) Practice (中文)1012 数字分类 (20 分)+易错测试点
129 0
PAT (Basic Level) Practice (中文)1012 数字分类 (20 分)+易错测试点
|
测试技术
PAT (Basic Level) Practice (中文) B1011 A+B 和 C (15 分)
PAT (Basic Level) Practice (中文) B1011 A+B 和 C (15 分)
107 0
PAT (Basic Level) Practice (中文) B1011 A+B 和 C (15 分)
PAT (Basic Level) Practice (中文) 1010 一元多项式求导 (25 分)
PAT (Basic Level) Practice (中文) 1010 一元多项式求导 (25 分)
99 0
|
C语言
PAT (Basic Level) Practice (中文) B1026 程序运行时间 (15 分)
PAT (Basic Level) Practice (中文) B1026 程序运行时间 (15 分)
122 0
|
存储 测试技术
PAT (Basic Level) Practice (中文) 1004 成绩排名 (20 分)
PAT (Basic Level) Practice (中文) 1004 成绩排名 (20 分)
89 0
PAT (Basic Level) Practice (中文) B1046 划拳 (15 分)
PAT (Basic Level) Practice (中文) B1046 划拳 (15 分)
83 0
PAT (Basic Level) Practice (中文) 1016 部分A+B (15 分)
PAT (Basic Level) Practice (中文) 1016 部分A+B (15 分)
88 0
|
算法
PAT (Basic Level) Practice (中文)1028. 人口普查(20分)
PAT (Basic Level) Practice (中文)1028. 人口普查(20分)
107 0