【题解】数字后移

题目描述
有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~

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章