將一個5*5的矩陣中最大的元素放在中心,4個角分別放4個最小的元素(順序為從左到右,從上到下依次從小到大存放),寫一函數實現之。用main函數調用


將一個5x5的矩陣中最大的元素放在中心,4個角分別放4個最小的元素(順序為從左到右,從上到下依次從小到大存放),寫一函數實現之。用main函數調用。

解題思路: 將二維數組當做一維數組進行處理比較方便,而二維數組本身就是扁平化存儲,所以直接使用首地址即可。

先遍歷找到最大值,將其與中間數字交換,而中間數字的下標就是數字總數除以2;

其次尋找四次最小值,每次尋找的時候將最小值的下標記錄起來,前提是這個數字如果已經是選中的最小數字之一,則需要跳過,也就是只跟剩余的數字作比較。(第二次開始遍歷找最小數字的時候,千萬不能與第一個最小數進行比較,否則永遠都只有一個最小數)。

答案:

#include <stdio.h>
#include <string.h>
void transform(int *arry, int col_row)
{
    //找到最大值
	int max = arry[0], max_idx;
	for (int i = 0; i < col_row * col_row; i++) {
		if (max < arry[i]) max = arry[i];//找出最大數
		max_idx = i;
	}
	//行列相乘得到總數量,除以2后加1則為中心點(暫時不考慮偶數的情況)
	int center_idx = (col_row * col_row) / 2;
	int tmp = arry[cen ter_idx]; arry[center_idx] = arry[max_idx]; arry[max_idx] = tmp;

	//找到四個最小值
	int min_idx[4];
	for (int i = 0; i < 4; i++) {//循環4次獲取到最小值
		int min_tmp = arry[col_row * col_row - 1];
		for (int j = 0; j < col_row * col_row; j++) {//遍歷所有數據,逐個比較獲取最小值
			int k = 0;
			for (; k < i; k++) {//但是要注意如果某個下標的數據已經是獲取過的最小值,則不能進行判斷(因為這個肯定是最小的)
				if (j == min_idx[k]) break;
			}
			if (k != i) { continue; }//k和i不同表示j這個坐標已經是找到的最小的幾個數字之一,則找下一個判斷
			if (min_tmp > arry[j]) { // 相當於在剩下的數中找到最小的那個數字
				min_tmp = arry[j];
				min_idx[i] = j; //並且記錄這個數字的位置
			}
		}
	}
    int change_idx[4];//先計算四個角的下標,便於后邊進行交換
	change_idx[0] = 0;//第一個要置換的數據的下標,也就是左上角
	change_idx[1] = col_row - 1;//第二個要置換的數據的下標,也就是右上角
	change_idx[2] = col_row * (col_row - 1);//第一個要置換的數據的下標,也就是左下角
	change_idx[3] = (col_row * col_row) - 1;//第一個要置換的數據的下標,也就是右下角
	for (int i = 0; i < 4; i++) {
		int tmp = arry[change_idx[i]]; arry[change_idx[i]] = arry[min_idx[i]]; arry[min_idx[i]] = tmp;
	}
	return ;
}
int main()
{
	int arry[5][5];
	printf("Please enter a 5x5 matrix: \n");
	for (int i = 0; i < 5; i++) {
		for (int j = 0; j < 5; j++) {
			scanf_s("%d", &arry[i][j]);
		} 
	}
	transform(*arry, 5);//將二維數組當做一維數組傳入處理,並且傳入行列數
	printf("\n");
	for (int i = 0; i < 5; i++) {
		for (int j = 0; j < 5; j++) {
			printf("%d ", arry[i][j]);
		}
		printf("\n");
	}
	system("pause");
	return 0;
}

將一個5*5的矩陣中最大的元素放在中心,4個角分別放4個最小的元素(順序為從左到右,從上到下依次從小到大存放),寫一函數實現之。用main函數調用


免責聲明!

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



猜您在找 將一個5*5的矩陣中最大的元素放在中心,4個角分別放4個最小的元素(順序為從左到右,從上到下依次從小到大存放),寫一函數實現之。用main函數調用 10.10 將一個5×5的矩陣中最大的元素放在中心,4個角分別放在4個最小的元素(按從左到右,從上到下的順序,依次從小到大存放),寫一個函數實現之,並用main函數調用。 題目:在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。 在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。 寫兩個函數,分別求兩個整數的最大公約數和最小公倍數,用主函數調用這兩個函數,並輸出結果。兩個整數由鍵盤輸人 編寫一個函數,計算三個數字的大小,按從小到大順序輸出 用指針編寫程序,把10個整數存放在一個一維數組中,將其中最小的數與第一個數對換,把最大的數與最后一個數對換 把一個數組按照從小到大的順序排列 Java中有多個異常, 如何確定捕獲順序(多個catch),先從上到下執行,判斷異常的大小,如果包含捕到異常,就進入這個catch,后面的就不再執行 寫一個函數用起泡法對輸人的10個字符按由小到大順序排列
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM