C语言矩阵5×5的问题

img

img

```

#include 
#include 
void mymin(int(*p)[5],int *min)
{
int a[25];
 int temp = 0;
for (int i = 0; i < 5; i++)
{
  for (int j = 0; j < 5; j++)
{
  a[temp] = p[i][j];
 temp++;
}
 }
for (int i = 0; i < 25; i++)
{for (int j = 0; j < 25 - i - 1; j++)
{
if (a[j] > a[j + 1])
{
int tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
for (int i = 0; i < 4; i++)
{
min[i] = a[i];
}
}
void cal(int (*p)[5])
{int min[4] = {0};
int max = p[0][0];
mymin(p, min);
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
if(max < p[i][j])
{
max = p[i][j];
}
}
}
p[2][2]=max;
p[0][0]=min[0];
p[0][4]=min[1];
p[4][0]=min[2];
p[4][4]=min[3];

}
int main()
{
int a[5][5];
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
scanf("%d", &a[i][j]);
}
}
cal(a);
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
system("pause");
return 0;
}

```这个问题如上图所示。

参考代码实现如下,望采纳

#include <stdio.h>
#define N 5
void arrange(int a[][N]) {
    // 将最大元素放在中心
    int max = a[0][0];
    int max_i = 0, max_j = 0;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            if (a[i][j] > max) {
                max = a[i][j];
                max_i = i;
                max_j = j;
            }
        }
    }
    a[max_i][max_j] = a[N/2][N/2];
    a[N/2][N/2] = max;
    // 将4个角分别放4个最小的元素
    int min[4] = {
        a[0][0], a[0][N-1], a[N-1][0], a[N-1][N-1]
    }
    ;
    int min_i[4] = {
        0, 0, N-1, N-1
    }
    ;
    int min_j[4] = {
        0, N-1, 0, N-1
    }
    ;
    for (int i = 0; i < 4; i++) {
        for (int j = i+1; j < 4; j++) {
            if (min[i] > min[j]) {
                int temp = min[i];
                min[i] = min[j];
                min[j] = temp;
                temp = min_i[i];
                min_i[i] = min_i[j];
                min_j[i] = min_j[j];
            }
        }
    }
    for (int i = 0; i < 4; i++) {
        a[min_i[i]][min_j[i]] = min[i];
    }
}
int main() {
    int a[N][N];
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            scanf("%d", &a[i][j]);
        }
    }
    arrange(a);
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
    return 0;
}