版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LX18792732127/article/details/76785340
题目分析:
例如,一个字符串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;
}
运行结果: