目录
- 一、问题描述:
- 二、解题思路
- 三、代码实现
- 四、运行结果
一、问题描述:
有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数。比如原数组:
1 2 3 4 5 6 7(n=7,m=4)===>旋转后4 5 6 7 1 2 3
二、解题思路
- 第一步:先将数组前n-m个数逆置
- 第二部:再将数组剩下的m个数逆置
- 第三步:最后将数组整体逆置
三、代码实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void swap(int* a, int* b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
void reverse(int arr[], int low, int high) {
while (low <= high) {
swap(&arr[low], &arr[high]);
low++;
high--;
}
}
void fun(int arr[], int length, int m) {
reverse(arr, 0, length - m - 1);
reverse(arr, length - m, length - 1);
reverse(arr, 0, length - 1);
}
void print(int arr[], int n) {
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
}
int main()
{
int arr[100];
int n, m;
printf("请输入n的个数:\n");
scanf("%d", &n);
printf("请输入每个数:\n");
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
printf("请输入顺序后移的量m:\n");
scanf("%d", &m);
printf("目前的序列:\n");
print(arr, n);
fun(arr, n, m);
printf("\n调整后的序列:\n");
print(arr, n);
return 0;
}
四、运行结果
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)