PAT乙级-1008 数组元素循环右移问题
模拟
题目
一个数组A中存有 $N$($N$ > 0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移 $M$($M$ $\geq$ 0)个位置,即将A中的数据由($A_0$ $A_1$ ……$A_{N-1}$)变换为 ($A_{N-M}$ …… $A_{N-1}$ $A_0$ $A_1$ …… $A_{N-M-1}$)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
输入格式:
每个输入包含一个测试用例,第1行输入N ( 1 $\leq$ N $\leq$ 100)、M(M $\geq$ 0);第2行输入N个整数,之间用空格分隔。
输出格式:
在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
输入样例:
1 | 6 2 |
输出样例:
1 | 5 6 1 2 3 4 |
题解
WA代码(未考虑全面)
1 |
|
柳神代码
分析:数组长度为n,要想把数组循环右移m位,只需要先将整个数组a倒置,再将数组前m位倒置, 最后将数组后n-m位倒置即可完成循环右移m位~reverse函数可以实现将⼀个数组或者vector中元素倒置,这个函数在algorithm头文件中~(如果m大于n,那么循环右移m位相当于循环右移m%n位,因为 那些n倍数位的移动是多余的,所以在使用m之前,先将m = m%n)
1 |
|
- 本文标题:PAT乙级-1008 数组元素循环右移问题
- 本文作者:馨er
- 创建时间:2021-04-24 15:41:00
- 本文链接:https://sjxbbd.vercel.app/2021/04/24/a6f412bb5632/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!