#include<stdio.h>
void main()
{
void f(int (*p)[5]);
int a[5][5],i,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++){
scanf("%d",&a[i][j]);
}
}
f(a);
printf("变换后如下:\n");
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
}
void f(int a[5][5])
{
int i,b[25],j,t=0,temp=0;
int *q,*r,*m;
q=r=m=*a;
for(i=0;i<5;i++)//将二维数组的值放入一维数组中去
{
for(j=0;j<5;j++)
{
b[t]=a[i][j];
t++;
}
}
for(i=0;i<24;i++)//选择排序按从小到大的顺序排列b数组
{
t=i;
for(j=i+1;j<25;j++)
{
if(b[t]>b[j])
{
t=j;
}
}
if(t!=i)
{
temp=b[i];
b[i]=b[t];
b[t]=temp;
}
}
for(i=0;i<5;i++)//找a数组中最大值
{
for(j=0;j<5;j++)
{
if(a[i][j]==b[24])
{
temp=1;
a[i][j]=a[2][2];
a[2][2]=b[24];
break;
}
}
if(temp==1)
{
break;
}
}
for(i=0;i<5;i++)//找a数组中最小值
{
temp=0;
for(j=0;j<5;j++)
{
if(a[i][j]==b[0])
{
temp=1;
break;
}
}
if(temp==1)
break;
}
q=&a[0][0];//将a[0][0]的地址赋值给q
a[i][j]=a[0][0];
a[0][0]=b[0];
for(i=0;i<5;i++)
{
temp=0;
for(j=0;j<5;j++)
{
if(a[i][j]==b[1]&&q!=&a[i][j])//q表示的是a[0][0]的地址,如果找到的是a[0][0]舍弃
{
temp=1;
break;
}
}
if(temp==1)
break;
}
r=&a[0][4];
a[i][j]=a[0][4];
a[0][4]=b[1];
for(i=0;i<5;i++)
{
temp=0;
for(j=0;j<5;j++)
{
if(a[i][j]==b[2]&&q!=&a[i][j]&&r!=&a[i][j])
{
temp=1;
break;
}
}
if(temp==1)
break;
}
m=&a[4][0];
a[i][j]=a[4][0];
a[4][0]=b[2];
for(i=0;i<5;i++)
{
temp=0;
for(j=0;j<5;j++)
{
if(a[i][j]==b[3]&&q!=&a[i][j]&&r!=&a[i][j]&&m!=&a[i][j])
{
temp=1;
break;
}
}
if(temp==1)
break;
}
a[i][j]=a[4][4];
a[4][4]=b[3];
}