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