大理欧亚牛奶厂地址:大家帮我找找错(简单C)7

来源:百度文库 编辑:高考问答 时间:2024/05/05 05:07:56
将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序是从左到右,从上到下顺序依次从小到大存放),编写一个函数实现之,用main函数调用。编译通过,执行时出现问题。
----------------------
#include <stdio.h>
void main()
{
void change(int *);
int a[5][5],*p,i,j;
printf("input matrix:\n");
for (i=0;i<5;i++)
for (j=0;j<5;j++)
scanf("%d",&a[i][j]);
p=&a[0][0];
change(p);
printf("Now,matrix:\n");
for (i=0;i<5;i++)
{for (j=0;j<5;j++)
printf("%d",a[i][j]);
printf("\n");
}

}

void change(int *p)
{int i,j,temp;
int *pmax,*pmin;
pmax=p;
pmin=p;
for (i=0;i<5;i++)
for (j=i;j<5;j++)
{if (*pmax<*(p+5*i+j)) pmax=p+5*i+j;
if (*pmin>*(p+5*i+j)) pmin=p+5*i+j;
}
temp=*(p+12);
*(p+12)=*pmax;
*pmax=temp;
temp=*p;
*p=*pmin;
*pmin=temp;
pmin=p+1;
for (i=0;i<5;i++)
for (j=0;j<5;j++)
if (((p+5*i+j)!=p) && (*pmin>*(p+5*i+j)))
pmin=p+5*i+j;
temp=*pmin;
*pmin=*(p+4);
*(p+4)=temp;
pmin=p+1;
for (i=0;i<5;i++)
for (j=0;j<5;j++)
if (((p+5*i+j)!=(p+4)) && ((p+5*i+j)!=p) && (*pmin>*(p+5*i+j)))
pmin=p+5*i+j;
temp=*pmin;
*pmin=*(p+20);
*(p+20)=temp;
pmin=p+1;
for (i=0;i<5;j++)
for (j=0;j<5;j++)
if (((p+5*i+j)!=p) && ((p+5*i+j)!=(p+4)) && ((p+5*i+j)!=(p+20)) && (*pmin>*(p+5*i+j)))
pmin=p+5*i+j;
temp=*pmin;
*pmin=*(p+24);
*(p+24)=temp;}

把元素排序之后按条件放就是了啊!不是要通过交换位子来实现嘛?如果是那样的话就参考一下A*算法嘛