将一个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]