将一个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");
}
}
运行结果: