先给出以下题目:
将一个整型数组循环右移m位。如数组{1, 2, 3, 4, 5}循环右移一位后变成{5, 1, 2, 3, 4}。
输入有3行
第一行输入一个整数m,表示数组长度 (1 <= m <= 1000)
第二行输入 m 个int型整数,分别表示数组元素,以空格隔开
第三行输入一个整数n,表示循环移动的位数 (0 <= n <= 1000)
Output
输出为一行,输出移位后的数组元素,以空格隔开 (注意最后有一个换行)
Sample Input
5
1 2 3 4 5
2
Sample Output
4 5 1 2 3
读完题目,我们大概了解右移指的是数组元素下标加1,其中有末尾两个元素是交换位置的不能视为下标加1。
一般这种数组循环题,我们不着急写主函数,我们可以把核心计算部分放在一个被调用函数里面,最后再调用它就行。
接下来我们先从简单的看,即数组向右移一位。如果是数组中间的元素,我们只需要A[i]=A[i-1](i>=1),然后套进一个for循环就完事了。如果是首末元素交换呢?这时候,我们可以联想到一个经典的两瓶汽水交换瓶子需要一个空瓶子的问题,所以我们引入一个中间变量temp来过渡一下,这个得放在第一个for循环前后。如下图
接着我们看看右移n位也就是循环n次的情况,我们可以再套一个for循环来循环n次。这时候这个函数已经成型了,如下
接着就是主函数的数组赋值和数组打印了(比较基础,不多加赘述)。完整代码如下
以上就是我对这道题的看法,如果有值得改进的地方请在评论区提出建议,感恩蓝天白云。