问题描述: 将存有n(n>0)个数的数组A中的元素A[0]至A[n-1]循环右 移k(k>0)位。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#define MAXSIZE 100
using namespace std;
void Reverse(char *a, int start, int end) //逆置
{
char temp;
for (; start < end; start++, end--)
{
temp = a[end];
a[end] = a[start];
a[start] = temp;
}
}
int main()
{
int n, i, k;
char a[MAXSIZE];
printf("请输入数组元素个数和右移位数:\n");
scanf_s("%d%d", &n,&k);
getchar();
printf("请输入%d个元素:", n);
a[n] = '\0';
for (i = 0; i < n; i++)
scanf_s("%c", &a[i]);
k = k%n;
Reverse(a, 0, k-1);
Reverse(a, k, n - 1);
Reverse(a, 0, n - 1);
printf("循环移动后数组序列为:\n");
for (i = 0; i < n; i++)
printf("%c", a[i]);
printf("\n");
system("pause");
}编译环境:Visual Studio
本文介绍了一种将数组中的元素循环右移k位的算法实现,通过将数组分为两部分并进行逆置操作来达到目的,最终的时间复杂度为O(n)。
984

被折叠的 条评论
为什么被折叠?



