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

Posted 小金小金逗你开心

tags:

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

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

一个数组A中存有N(>)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥)个位置,即将A中的数据由(A0​​A1​​AN1​​)变换为(ANM​​AN1​​A0​​A1​​ANM1​​)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

输入格式:

每个输入包含一个测试用例,第1行输入N(1)和M(≥);第2行输入N个整数,之间用空格分隔。

输出格式:

在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。

输入样例:

6 2
1 2 3 4 5 6
 

输出样例:

5 6 1 2 3 4
 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int num[105], n = 0, k = 0, i = 0;
 6     cin >> n >> k;
 7     if (k != 0)//分为两种情况 右移N位或者右移0位
 8     {
 9        if(n<k)
10             k=k%n;//为什么要K%N呢 举例 如果K不%N 那么就会导致下标溢出 比如 输入6 7 6位数整体右移7次 那么下标怎么算都不会变到7对吧?
11         for (i = k; i < n; i++)//精髓 举例! 假如他要右移2次 那么我直接从下标2的地方开始输入就相当于把1~n-2的数直接右移
12         {
13             cin >> num[i];
14         }
15         for (i = 0; i < n -(n -k); i++) //经过上面的输入之后 就还剩下了 n~n-n-2的数没有输入所以从下标0开始输入 这样就完成了整体右移
16         {
17             cin >> num[i];
18         }
19         for (i = 0; i < n - 1; i++)//n-1是为了防止结尾空格
20         {
21             cout << num[i] << " ";
22         }
23         cout << num[i];
24     }
25     else if(k==0 ||n==k)//右移0次就直接输入然后后打印就好了
26     {
27         for (i = 0; i < n ; i++)
28         {
29             cin >> num[i];
30         }
31         for (i = 0; i < n - 1; i++)
32         {
33             cout << num[i] << " ";
34         }
35         cout << num[i];
36     }
37  
38 
39 
40 
41     return 0;
42 }

 

 

以上是关于PAT乙级 1008 数组元素循环右移问题 (20 分)的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

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