有n個整數,使前面各數順序向后移m個位置,最后m個數變成最前面m個數,見圖8.43。 寫一函數實現以上功能,在主函數中輸人n個整數和輸出調整后的n個數


有n個整數,使前面各數順序向后移m個位置,最后m個數變成最前面m個數,見圖8.43。 寫一函數實現以上功能,在主函數中輸人n個整數和輸出調整后的n個數。

點我看視頻講解+可運行代碼,記得收藏視頻,一鍵三連
有n個整數,使前面各數順序向后移m個位置,最后m個數變成最前面m個數,見圖8.43。 寫一函數實現以上功能,在主函數中輸人n個整數和輸出調整后的n個數

解題思路: 找出倒數第m個數據,從這里開始保存倒數第m位置的數據,因為倒數第m位置的數據要放到數組最前方,將m之前的數據向后偏移一位,然后將數組第一個位置的數據替換為保存的m位的數據,逐個往后遞增即可。

答案:

#include <stdio.h>
void move(int *arry, int n, int m)
{
	int end_idx = n - m;//找到倒數第m個數據的位置,也就是要移動到數組首部的數據的起始位置
	for (int i = 0; i < m; i++) {
		int *p = arry + end_idx + i;//從倒數第m個數據的位置開始逐漸向后偏移直到數組尾部
		int tmp = *p;//獲取到這個位置的值,用於數組前邊數據向后偏移1位之后,向數組第i位賦值
		for (int j = end_idx + i; j > i; j--) {//從第i位開始逐個向后偏移一位
			*p = *(p - 1);
			p--;
		}
		*(arry + i) = tmp;//數組的前第i個數字逐個替換為后邊被覆蓋的值
	}
}
int main()
{
	int number[32], n, m, i;
	printf("Please enter the number of numbers: ");
	scanf_s("%d", &n);//先確定要輸入多少個數字
	printf("Please enter %d numbers: ", n);
	for (i = 0; i < n; i++) {
		scanf_s("%d", &number[i]);//輸入指定個數的數字
	}
	printf("Number of positions to move: ");
	scanf_s("%d", &m);//確定要向后移動多少個位置
	move(number, n, m);
	for (i = 0; i < n; i++) {
		printf("%d ", number[i]);
	}
	printf("\n");
	system("pause");
	return 0;
}

有n個整數,使前面各數順序向后移m個位置,最后m個數變成最前面m個數,見圖8.43寫一函數實現以上功能,在主函數中輸人n個整數和輸出調整后的n個數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM