1008. 数组元素循环右移问题
来源:互联网 发布:数据库的三大范式题 编辑:程序博客网 时间:2024/04/30 01:00
这个题如果只是为了得到正确答案的话,使用直接打印的方法是最简单地。
但是如何能真正实现数组元素的循环移位呢?
要注意的是:当移位次数k大于数组长度N的时候,跟移位k = k%n的效果是一样的。
我能想到的方法是,每次向右移一位,移动n次,实现方法如下:
#include <stdio.h>void shiftRight(int *array, int offset, int N);void shiftOne(int *array, int N);int main(){ int N, offset, i; scanf("%d %d", &N, &offset); int array[N]; /* input */ for (i = 0; i < N; i++) scanf("%d", array+i); /* shift right */ offset %= N; shiftRight(array, offset, N); /* output */ for (i = 0; i < N; i++) printf("%d%c", array[i], i < N-1 ? ' ' : '\n'); return 0;}void shiftRight(int *array, int offset, int N){ while ( offset-- > 0) shiftOne(array, N);}void shiftOne(int *array, int N){ /* shift the array to right for one, and the last element become the first */ int last = array[N-1]; for( int i = N-1; i > 0; i-- ) array[i] = array[i-1]; array[0] = last;}显然这应该不是最好的方法,网上一查,发现了一个叫逆序的方法:(参见:http://blog.csdn.net/laizemu/article/details/4046791)
此方法能实现线性时间的移位,算法既简单又漂亮。在这里就不具体实现了。
不知道还有没有其他方式可以实现循环移位。
0 0
- 1008. 数组元素循环右移问题
- 1008. 数组元素循环右移问题
- 1008. 数组元素循环右移问题
- 1008. 数组元素循环右移问题
- 1008. 数组元素循环右移问题
- 1008.数组元素循环右移问题
- 1008. 数组元素循环右移问题
- 1008. 数组元素循环右移问题
- 1008. 数组元素循环右移问题
- 1008. 数组元素循环右移问题
- 1008. 数组元素循环右移问题
- 1008. 数组元素循环右移问题
- 1008. 数组元素循环右移问题
- 1008. 数组元素循环右移问题
- 1008.数组元素循环右移问题
- 1008. 数组元素循环右移问题
- 1008. 数组元素循环右移问题
- 1008. 数组元素循环右移问题
- 用 python绘图及网络分析(win64下matplotlib,networkx安装方法)
- DiskFileItemFactory类
- python 绑定进程在某个cpu上执行 affinity
- 趣味编程,有谁研究过这方面吗?
- Linux内核发布模式与开发组织模式(1)
- 1008. 数组元素循环右移问题
- redis资料地址
- jquery复习笔记
- 关于cpu散热片(及风扇)的固定问题
- android中用ExpandableListView实现三级扩展列表
- 黑马程序员——Java高新技术---泛型
- eclipse自动去除无效引用、去除无效变量和自动格式化代码
- read_copy update
- 鸟哥的Linux私房菜笔记之二