PAT 1008 数组元素循环右移问题
2015-09-23 14:37
176 查看
数组元素循环右移问题
一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0A1……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
思路:先将数组所有数倒序,再分别将前M个数倒序,后N-M个数倒序
#include <stdio.h> int main() { int N, M; // 正整数N,M scanf("%d %d", &N, &M); M = M % N; int A ; for (int i = 0; i < N; i++) scanf("%d", &A[i]); // 将数组的所有数倒序 for (int i = 0; i<N/2; i++) { int temp = A[i]; A[i] = A[N-i-1]; A[N-i-1] = temp; } // 将前M个数倒序 for (int i = 0; i<M/2; i++) { int temp = A[i]; A[i] = A[M-i-1]; A[M-i-1] = temp; } // 将后N-M个数倒序 for (int i = 0; i<(N-M)/2; i++) { int temp = A[M+i]; A[M+i] = A[N-i-1]; A[N-i-1] = temp; } for (int i = 0; i<N-1; i++) printf("%d ", A[i]); printf("%d\n", A[N-1]); return 0; }
[/code]
相关文章推荐
- SAP起停异常—实例仍然运行但SAP起停脚本检测不到
- 怎么看陌陌新推出的陌陌现场呢?
- 如何Disable Alfresco的Download以及打印功能
- Android 笔记:2015.09.23
- Stone Game, Why are you always there? - HDU 2999 sg函数
- 把秒转换为时分秒
- ubuntu 14.04 root 登录
- 求正弦函数sin(x)的近似值的多项式求解
- iOS之 NSTimer(二)
- 如何检查 IP是否冲突了
- 问题解决---Ubuntu,如果apt-get提示/var/xxx/xxx/lock
- 十大最坑爹的产品设计缺陷你遇到过几个?
- Java中的方法重载的参数是以静态类型为依据
- c语言课程总结
- easyUI中使用datatimebox选定开始日期时间后自动带出7天之后的结束日期时间
- 移动设备单点登录功能实现
- Spring注解Hibernate对象的实例
- 组合算法的实现,递归,C语言
- (1,eval)('this') vs eval('this') in JavaScript?
- UI中TExtField的几种回收键盘的方法