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

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}
运行结果:



猜你喜欢

转载自blog.csdn.net/LX18792732127/article/details/76785340
今日推荐