帮我看看这串代码
#include <stdio.h>
void main()
{
int a[5][5]={{2,1,2,1,1},{3,2,1,2,1},{0,2,1,2,1},
{1,2,3,4,1},{1,2,2,2,1}};/*定义一个5*5的房间,里面装满金币*/
int sum=2,m=0,k=0; /*站在第一个房间得到2个金币*/
while((m<5)&&(k<5)) /*走到最下面或者最后面停下*/
{
if (a[k+1][m]>a[k][m+1])/*只能朝下和朝右走*/
{
sum=sum+a[k+1][m]; /*2 1 2 1 1*/
printf("go m:%d\t",a[k+1][m]); /*3 2 1 2 1*/
k++; /*0 2 1 2 1*/
/*1 2 3 4 1*?
} /*1 2 2 2 1*/
else
{sum=sum+a[k][m+1];
printf("go k:%d\t",a[k][m+1 ); /*选择金币多的房间走*/
m++;}
printf("%d\n",sum); /*打印得到多少金币*/
}
getch();
}
这样的一个程序,输出是:go:3 sum=5
go:2 sum=7
go:2 sum=9
go:2 sum=11
go:3 sum=14
go:4 sum=18
go:2 sum=20
go:4198946 sum=4198966
我怎么想不出来最一个go:4198946 sum=4198966 是怎么出现的呢? 是哪里出错了,这个代码可以精简吗?
Go printf
[解决办法]
while((m<5)&&(k<5))//m和k最大值为4
后面的
a[k+1][m]、a[k][m+1]会造成数组越界
[解决办法]
不能只判断m<5&&k<5。。。这样下边的m+1或k+1可能会大于等于5的。。会造成数组越界。。就乱了。。
#include <stdio.h>
void main()
{
int a[5][5]={{2,1,2,1,1},{3,2,1,2,1},{0,2,1,2,1},
{1,2,3,4,1},{1,2,2,2,1}};/*定义一个5*5的房间,里面装满金币*/
int sum=2,m=0,k=0; /*站在第一个房间得到2个金币*/
while(1) /*走到最下面或者最后面停下*/
{
if(m == 4 && k == 4) break;//无路可走了。。
if(m == 4
[解决办法]
k + 1 < 5 && a[k+1][m] > a[k][m+1])/*只能朝下和朝右走*/
{
sum=sum+a[k+1][m]; /*2 1 2 1 1*/
printf("go m:%d\t",a[k+1][m]); /*3 2 1 2 1*/
k++; /*0 2 1 2 1*/
/*1 2 3 4 1*/
} /*1 2 2 2 1*/
else
{
sum=sum+a[k][m+1];
printf("go k:%d\t",a[k][m+1]); /*选择金币多的房间走*/
m++;
}
printf("%d\n",sum); /*打印得到多少金币*/
}
}
[解决办法]
if和while不是函数,是语句,基础打好,走得更远。