【C/C++】5*5的矩阵中最大的元素放在中心 四个角分别放四个最小的元素

本文介绍了一个C语言程序,该程序可以将一个5x5矩阵中的最大值移动到矩阵中心,同时将四个最小值按顺序放置在四个角部。通过定义函数实现矩阵元素的交换和打印,展示了完整的代码实现和运行结果。

将一个5*5的矩阵中最大的元素放在中心, 四个角分别放四个最小的元素(顺序从左到右,从上到下顺序依次从小到大存放),写一个函数实现之。用main函数调用。

原矩阵为:
35 34 33 32 31
30 29 28 27 26
25 24 23 22 21
20 19 18 17 16
15 14 13 12 11
改变后的矩阵:
11 34 33 32 12
30 29 28 27 26
25 24 35 22 21
20 19 18 17 16
13 23 15 31 14

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void swap(int *a, int *b);
void transform(int *arry, int col_row);
void prinArry(int *arry, int col_row);

int main() {
	int b[5][5] = { 35 ,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11 };
	/*printf("Please enter a 5x5 matrix: \n");
	for (int i = 0; i < 5; i++) {
		for (int j = 0; j < 5; j++) {
			scanf_s("%d", &b[i][j]);
		}
	}*/
	printf("变换前:\n");
	prinArry(*b, 5);
	transform(*b, 5);//将二维数组当做一维数组传入处理,并且传入行列数
	printf("\n");
	printf("变换后:\n");
	prinArry(*b, 5);
	system("pause");
	return 0;
}

void swap(int *a, int *b) {
	int temp = *a;
	*a = *b;
	*b = temp;
}
void transform(int *arry, int col_row)
{
	int max = arry[0], min0 = arry[0], min1 = arry[0], min2 = arry[0], min3 = arry[0];
	int max_idx = 0, min_idx[4];
	for (int i = 0; i < col_row*col_row; i++)
	{
		if (arry[i] > max)
		{
			max = arry[i];
			max_idx = i;
		}
		if (arry[i] < min0)
		{
			min3 = min2;
			min2 = min1;
			min1 = min0;
			min0 = arry[i];
			min_idx[3] = min_idx[2];
			min_idx[2] = min_idx[1];
			min_idx[1] = min_idx[0];
			min_idx[0] = i;
		}
	}
	int center_idx = (col_row * col_row) / 2;//获取中心点下标
	swap(&arry[center_idx], &arry[max_idx]);
	//int tmp = arry[center_idx]; arry[center_idx] = arry[max_idx]; arry[max_idx] = tmp;//将最大值交换到中心位置

	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;//第一个要置换的数据的下标,也就是右下角
	//将4个最小值一次交换到四个角落
	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;
		swap(&arry[change_idx[i]], &arry[min_idx[i]]);
	}
	return;
}

void prinArry(int *arry, int col_row) {
	for (int i = 0; i < col_row; i++)
	{
		for (int j = 0; j < col_row; j++)
		{
			printf("%d ", *(arry + (i * col_row) + j));
		}
		printf("\n");
	}
}

运行结果:
在这里插入图片描述

codeSample.c文件 下载链接

C++中,你可以首先找到矩阵中的最大最小值,然后按照特定的顺序填充到矩阵。以下是实现该功能的一个简单步骤和示例代码: 1. **寻找最大值和最小**: 使用类似上面提到的方法,分别找到矩阵中的最大值(max)和最小值(min)。 2. **创建新矩阵**: 创建一个新的5x5矩阵,用于存结果。 3. **填充中心位置**: 把最大放在中心元素(2, 2)的位置。 4. **填充**: 分别从原始矩阵的左上(0, 0)开始,找到剩下的四个最小值,依次放在右下(4, 4),右上(4, 0),左下(0, 4)。 下面是一个简单的实现示例: ```cpp #include <iostream> using namespace std; void fillMatrixWithMinMax(int matrix[5][5], int minVal, int maxVal) { matrix[2][2] = maxVal; // 中心元素 int valuesToFill[4] = {minVal, minVal, minVal, minVal}; // 存储剩余的最小值 for (int i = 0; i < 4; i++) { int row = i % 2 == 0 ? 0 : 4; // 右下、右上、左下 int col = i / 2 + row / 2; // 计算对应的位置 matrix[row][col] = valuesToFill[i]; } } int main() { int matrix[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} }; int minVal = *min_element(matrix[0], matrix[5]); int maxVal = *max_element(matrix[0], matrix[5]); fillMatrixWithMinMax(matrix, minVal, maxVal); // 打印矩阵 for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { cout << matrix[i][j] << " "; } cout << endl; } return 0; } ``` 注意:这段代码假设输入矩阵已经包含5x5的所有元素,如果实际应用中需要处理边界的特殊情况,还需要额外检查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值