首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

帮小弟我看看这串代码

2013-06-25 
帮我看看这串代码#include stdio.hvoid main(){int a[5][5]{{2,1,2,1,1},{3,2,1,2,1},{0,2,1,2,1},{1,2

帮我看看这串代码
#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不是函数,是语句,基础打好,走得更远。

热点排行