#include<stdio.h>
void swap(int*,int*);
void process(int *,int);
void arry(int*,int);
int main()
{ int a[5][5],i,j;
for(i=0; i<5; i++)
{ for(j=0; j<5; j++)
scanf("%d",&a[i][j]);
}
process(*a,5);
arry(*a,5);
return 0;
}
void process(int *a,int n)
{ int i,max,min,max_i,min0,min1,min2,min3;
max=min=a[0];
max_i=min0=min1=min2=min3=0;
for(i=0; i<n*n; i++)
if(a[i]>max)
{ max=a[i];
max_i=i;
}
if(a[i]<min)
{ min=a[i];
min3=min2;
min2=min1;
min1=min0;
min0=i;
}
swap(&a[n*n/2],&a[max_i]);
swap(&a[0],&a[min0]);
swap(&a[n-1],&a[min1]);
swap(&a[(n-1)*n],&a[min2]);
swap(&a[(n*n-1)],&a[min3]);
}
void swap(int*p,int*q)
{ int t=*p;
*p=*q;
*q=t;
}
void arry(int*a,int n)
{ for(int i=0; i<n; i++)
{ for(int j=0; j<n; j++)
printf("%5d",*(a+i*n+j));
printf("\n");
}
}
我看了一下,你这个代码的选四个最小数有问题,当然你能把二维数组当成一维数组来处理,这确实是个不错的方法,我试了一个样例5 8 10 12 11 6 之后都输入100,你看看你这个还能选出最小的四个数据吗,所以我觉得你这个有点问题,而且你要遍历所有的数据的的话应该放到循环里,我看你没有放到循环里,可能是忘了加括号,当然你这个想法肯定是好的,但是简单的赋值是肯定没法选出最小值的,我想的办法就是,你先把这些数据都排序,但是不放到你创建的二维数组里,整一个新的二维数组,排序好之后存进去,存进去之后再把四个角的值一换,当然这样一改就出现问题了,就是你原本的数据还在里面,是替换,不是交换,所以你可以再搞一个把他们原本的数据位置都记下来,这样就可以实现很多的功能,当然我不知道还有没有别的方法,这可能有点麻烦