手机免费创建个人网站,网站开发自学时间,dw怎么做打开网站跳出提示,久久建工集团1.题目要求#xff1a;
将一个5X5的矩阵中最大的元素放在中心#xff0c;四个角分别放四个最小的元素#xff08;顺序为从左到右#xff0c;从上到下#xff0c;从小到大存放#xff09;#xff0c;写一函数实现之。
2.数组法实现
#define _CRT_SECURE_NO_WARNINGS 1…1.题目要求
将一个5X5的矩阵中最大的元素放在中心·四个角分别放四个最小的元素顺序为从左到右从上到下从小到大存放写一函数实现之。
2.数组法实现
#define _CRT_SECURE_NO_WARNINGS 1
#includestdio.h
//一、数组法实现
int main()
{int arr[5][5] {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}};void sort(int (*arr)[5],int row,int col);sort(arr,5,5);int i, j;for (i 0; i 5; i){for (j 0; j 5; j){printf(%5d, arr[i][j]);}printf(\n);}return 0;
}
void sort(int arr[][5],int row,int col)
{//1.找到最大值放到中间int* mid arr[row / 2][col / 2];int* max mid;for (int i 0; i row; i){for (int j 0; j col; j){if (*max arr[i][j]){max arr[i][j];}}}int temp *max; *max *mid; *mid temp;//2.分别找到四个最小值放到四个角int* corner[4] { arr[0][0],arr[0][col - 1],arr[row - 1][0],arr[row - 1][col - 1] };for (int i 0; i 4; i){int* min mid;//这时候mid位置就是最大值位置for (int m 0; m row; m){for (int n 0; n col; n){int k 0;for (k 0; k i; k)//找到第0个最小数的时候i是0意味着没有角落被置换找到第1个最小值i是1{if (arr[m][n] corner[k]) {//这就是被置换完毕的角落的位置break;}}if (k ! i)continue;//k不等于i就意味着上面的for循环break出来了此时该位置就是被置换的角落应该避免该位置if (*min arr[m][n])//第m行n列的数据比min位置的数据小则让min指向新位置{min arr[m][n];}}}int temp *min; *min *corner[i]; *corner[i] temp;}
} 3.指针法实现
#define _CRT_SECURE_NO_WARNINGS 1
#includestdio.h
//二、指针法实现
int main()
{int arr[5][5] {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}};void sort(int (*arr)[5],int row,int col);sort(arr,5,5);int i, j;for (i 0; i 5; i){for (j 0; j 5; j){printf(%5d, arr[i][j]);}printf(\n);}return 0;
}
二、指针法实现
void sort(int (*arr)[5], int row, int col)
{//1.找到最大值放到中间int* mid *(arr row / 2) col / 2;int* max mid;for (int i 0; i row; i){for (int j 0; j col; j){if (*max *(*(arri)j)){max *(arri)j;}}}int temp *max; *max *mid; *mid temp;//2.分别找到四个最小值放到四个角int* corner[4] { *arr,*arr col - 1,*(arr row - 1),*(arr row - 1) col - 1 };for (int i 0; i 4; i){int* min mid;//这时候mid位置就是最大值位置for (int m 0; m row; m){for (int n 0; n col; n){int k 0;for (k 0; k i; k)//找到第0个最小数的时候i是0意味着没有角落被置换找到第1个最小值i是1{if (*(arrm)n corner[k]) {//这就是被置换完毕的角落的位置break;}}if (k ! i)continue;//k不等于i就意味着上面的for循环break出来了此时该位置就是被置换的角落应该避免该位置if (*min *(*(arrm)n))//第m行n列的数据比min位置的数据小则让min指向新位置{min *(arrm)n;}}}int temp *min; *min *corner[i]; *corner[i] temp;}
}