【数据结构】中对n个数字右移k位

xiaoxiao2021-02-28  93

题目分析:

例如,一个字符串12345abcdef,右移6位的话,变成abcdef12345。

由结果可以看出,被分成了两个部分,前面6个字符和后面5个字符没有改变,只有前半部分和后半部分整体交换。

于是我们可以使用划分子问题的思路来解决这个问题。

右移k位,则可以分成前面k位和后面len-k位,先对两个部分各自进行逆置,然后对两个部分合起来进行reverse。

代码实现:

#include<iostream> using namespace std; #include<math.h> #include<string.h> void Reverse(char* a, int left, int right) { for (; left < right; left++, right--) { char tmp = a[right]; a[right] = a[left]; a[left] = tmp; } } int main() { int k; char a[100]; gets(a); int len = strlen(a); cout << "请输入k的值:" << endl; cin >> k; k = k / len; Reverse(a, 0,len - k - 1); Reverse(a, len - k, len - 1); Reverse(a, 0, len - 1); cout << a; system("pause"); return 0; } 运行结果:

转载请注明原文地址: https://www.6miu.com/read-56554.html

最新回复(0)