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