小憨总结:
去除二维数组中一个数据时,不是i!=x&&!=j ,而是(!(ix&&jy))
#include "stdio.h"
void main()
{
void solve(int (*p)[5]);
int a[5][5];
int i,j;
printf("input array:\n");
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
scanf("%d",*(a+i)+j);
}
}
solve(a);
printf("solved:\n");
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
printf("%3d ",*(*(a+i)+j));
}
printf("\n");
}
}
void solve(int (*p)[5])
{
void swap(int *,int *);
int i,j,t,ti,tj,min[4],max;
min[0] = p[0][0];
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(min[0]>*(*(p+i)+j))
{
min[0] = *(*(p+i)+j);
ti = i;
tj = j;
}
}
}
if(min[0]!= p[0][0])
{
swap(*p,*(p+ti)+tj);
}
min[1] = p[0][4];
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(min[1]>*(*(p+i)+j))
{
if(!(i==0&&j==0))
{
min[1] = *(*(p+i)+j);
ti = i;
tj = j;
}
}
}
}
if(min[1]!= p[0][4])
{
swap(*p+4,*(p+ti)+tj);
}
min[2] = *(*(p+4));
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(min[2]>*(*(p+i)+j))
{
if((!(i==0&&j==0))&&(!(i==0&&j==4)))
{
min[2] = *(*(p+i)+j);
ti = i;
tj = j;
}
}
}
}
if(min[2]!= p[4][0])
{
swap(*(p+4),*(p+ti)+tj);
}
min[3] = *(*(p+4)+4);
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if((min[3]>*(*(p+i)+j)))
{
if((!(i==0&&j==0))&&(!(i==4&&j==0))&&(!(i==0&&j==4)))
{
min[3] = *(*(p+i)+j);
ti = i;
tj = j;
}
}
}
}
if(min[3]!= p[4][4])
{
swap(*(p+4)+4,*(p+ti)+tj);
}
max = *(*(p+2)+2);
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(max<*(*(p+i)+j))
{
max = *(*(p+i)+j);
ti = i;
tj = j;
}
}
}
if(max!= p[2][2])
{
swap(*(p+2)+2,*(p+ti)+tj);
}
}
void swap(int *a,int *b)
{
int t;
t = *a;
*a = *b;
*b = t;
}
/*
运行结果:
input array:
8 2 3 4 55
6 7 1 9 10
11 12 13 14 15
16 17 18 19 27
21 22 23 24 25
solved:
1 13 21 25 2
6 7 8 9 10
11 12 55 14 15
16 17 18 19 27
3 22 23 24 4
*/