【題解】數字後移

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

在這裏插入圖片描述

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