题目描述
有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。
输入
输入数据的个数n n个整数 移动的位置m
输出
移动后的n个数
样例输入
10
1 2 3 4 5 6 7 8 9 10
2
样例输出
9 10 1 2 3 4 5 6 7 8
解题思路
先写一个逆置函数,用来交换给定范围内的数据
然后通过一个总逆置的函数,先将m 前面的数字调转过来,然后再将m 后面的数字调转,最后再将整个数组调转。完成后移操作。
#include <stdio.h>
//接收用户数据
void input_data(int* num, int n);
//逆置数组
void Reverse(int* num, int q, int p);
//总逆置
void convert(int* num, int n);
//输出数据
void put_data(int* num, int n);
int main(void){
int num[20];
//接收用户给定的数组大小
int n;
scanf("%d", &n);
//调用函数实现功能
input_data(num, n);
convert(num, n);
put_data(num, n);
return 0;
}
//接收用户数据
void input_data(int* num, int n){
//函数需要两个参数:*num 用来初始化的数组,n 数组的长度
//接收用户数据
for(int i = 0; i < n; i++)
scanf("%d", &num[i]);
}
//逆置数组
void Reverse(int* num, int q, int p){
int temp;
//对指定范围内的数据进行互换
for(; q < p; q++, p--){
temp = num[q];
num[q] = num[p];
num[p] = temp;
}
}
//总逆置
void convert(int* num, int n){
//接收数据要后移的位置
int m;
scanf("%d", &m);
//判断操作数据合法性
if(m <= 0 || m >= n) return;
else{
//下面有操作不同范围时,数组内的数据详情
Reverse(num, 0, n - m - 1);
Reverse(num, n - m, n - 1);
Reverse(num, 0, n - 1);
}
}
//输出数据
void put_data(int* num, int n){
for(int i = 0; i < n; i++){
printf("%d ", num[i]);
}
}
本月更新进度 4/15
创作不易,你的点赞是我最大的动力!!!
我们下次再见 end~