一个简单的题目,望大家来改正!
习题描述:将一个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>
void exchange(int (*a)[5])
{
int i,i1,i2,j,j1,j2,max=0,min1=a[0][0];
int min2,min3,min4;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
if(a[i][j]>max)
{
max=a[i][j];
i1=i;j1=j;
}
if(a[i][j]<min1)
{
min1=a[i][j];
i2=i;j2=j;
}
}
a[i1][j1]=a[2][2];
a[2][2]=max;
a[i2][j2]=a[0][0];
a[0][0]=min1;
min2=max;
min3=max;
min4=max;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(a[i][j]<min2&&a[i][j]>a[0][0])
{
min2=a[i][j];
i1=i;j1=j;
}
a[i1][j1]=a[0][4];
a[0][4]=min2;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(a[i][j]<min3&&a[i][j]>a[0][4])
{
min3=a[i][j];
i1=i;j1=j;
}
a[i1][j1]=a[4][0];
a[4][0]=min3;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(a[i][j]<min4&&a[i][j]>a[4][0])
{
min4=a[i][j];
i1=i;j1=j;
}
a[i1][j1]=a[4][4];
a[4][4]=min4;
}
main()
{ int i,j;
int a[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};
exchange(a);
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
希望高手们能贴出优秀的代码,让大家学习啊!