请大神运行一下,然后解释下哪里出错了?小弟我要详细回答,多谢,详细告诉小弟我原因
请大神运行一下,然后解释下哪里出错了?我要详细回答,谢谢,详细告诉我原因
#include <stdio.h>
void move(int *p)
{int *q,t,i,j;
int *min,*max;
min=max=p;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(*min>*(p+5*i+j))min=(p+5*i+j);
else if(*max<*(p+5*i+j))max=(p+5*i+j);
t=*max;
*max=*(p+12);
*(p+12)=t;
t=*min;
*min=*p;
*p=t;
min=p+1;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{if(i==0&&j==0)continue;
if(*min>*(p+5*i+j))min=(p+5*i+j);}
t=*min;
*min=*(p+4);
*(p+4)=t;
min=p+1;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if((p+5*i+j)!=p&&(p+5*i+j)!=(p+4)&&*min>*(p+5*i+j))min=(p+5*i+j);
t=*min;
*min=*(p+20);
*(p+20)=t;
min=p+1;
for(i=0;i<5;i++)
for(j=0;i<5;j++)
{if((i==0&&j==0)||(i==0&&j==4)||(i==4&&j==0))continue;
if(*min>*(p+5*i+j))min=(p+5*i+j);
}
t=*min;
*min=*(p+24);
*(p+24)=t;
}
void main()
{int a[5][5],*p,i;
for(i=0;i<5;i++)
scanf("%d %d %d %d %d",&a[i][0],&a[i][1],&a[i][2],&a[i][3],&a[i][4]);
p=&a[0][0];
putchar('\n');
move(p);
for(i=0;i<5;i++)
printf("%d %d %d %d %d\n",a[i][0],a[i][1],a[i][2],a[i][3],a[i][4]);
}
------解决思路----------------------
要学着自己单步一个.
还有,上代码时格式化下,...要不然难看死啦,还有.说明一下代码的意图...
#include <stdio.h>
void move(int *p)
{int *q,t,i,j;
int *min,*max;
min=max=p;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(*min>*(p+5*i+j))min=(p+5*i+j);
else if(*max<*(p+5*i+j))max=(p+5*i+j);
t=*max;
*max=*(p+12);
*(p+12)=t;
t=*min;
*min=*p;
*p=t;
min=p+1;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{if(i==0&&j==0)continue;
if(*min>*(p+5*i+j))min=(p+5*i+j);}
t=*min;
*min=*(p+4);
*(p+4)=t;
min=p+1;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if((p+5*i+j)!=p&&(p+5*i+j)!=(p+4)&&*min>*(p+5*i+j))min=(p+5*i+j);
t=*min;
*min=*(p+20);
*(p+20)=t;
min=p+1;
for(i=0;i<5;i++)
for(j=0;i<5;j++)
{if((i==0&&j==0)||(i==0&&j==4)||(i==4&&j==0))continue;
if(*min>*(p+5*i+j))min=(p+5*i+j);
}
t=*min;
*min=*(p+24);
*(p+24)=t;
}
void main()
{int a[5][5],*p,i;
for(i=0;i<5;i++)
scanf("%d %d %d %d %d",&a[i][0],&a[i][1],&a[i][2],&a[i][3],&a[i][4]);
p=&a[0][0];
putchar('\n');
move(p);
for(i=0;i<5;i++)
printf("%d %d %d %d %d\n",a[i][0],a[i][1],a[i][2],a[i][3],a[i][4]);
}
------解决思路----------------------
要学着自己单步一个.
还有,上代码时格式化下,...要不然难看死啦,还有.说明一下代码的意图...
void move(int *p)
{
///////.............
min=p+1;
for(i=0;i<5;i++)
for(j=0;i<5;j++) /// 这里死循环了:这个 i<5 ,.... 应该是 j<5 吧 .
{
if((i==0&&j==0)
------解决思路----------------------
(i==0&&j==4)
------解决思路----------------------
(i==4&&j==0))continue;
if(*min>*(p+5*i+j))min=(p+5*i+j);
}
t=*min;
//// .......