J - 下落的树叶 ( 输入函数要有返回值!)

Posted -ifrush

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了J - 下落的树叶 ( 输入函数要有返回值!)相关的知识,希望对你有一定的参考价值。

题目见紫书p161

re,一直re,re到怀疑人生

刚开始出现re的时候怀疑是数组开的不够大

但一直都修改不行

 

结果是,  , , ,输入函数bool函数没加返回值 return true;

所以re时 ,可能

①除以零 

②数组越界:int a[3]; a[10000000]=10;

③指针越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;(特别是空指针!)

④使用已经释放的空间:int * p; p=(int *)malloc(5 * sizeof(int));free(p); *p=10;

⑤数组(在函数内)开得太大,超出了栈的范围,造成栈溢出:int a[100000000];

再加一项 圈6 非void的函数没有返回值(特别是bool)

#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;

int p[1000];
int lmax=500,rmax=500;
bool sum(int u,int lp){
    int r,l;
    p[lp]+=u;    
    scanf("%d",&l);
    if(l!=-1)sum(l,lp-1);
    scanf("%d",&r);
    if(r!=-1)sum(r,lp+1);
    if(lp<lmax)lmax=lp;
    if(lp>rmax)rmax=lp;
    return true; //<---就是这里!!!要加的
}
int main(){
    int root,j=1;
    memset(p,0,sizeof(p));
    while(j){
    lmax=500;rmax=500;
    scanf("%d",&root);
    if(root==-1)break;
    sum(root,500);
    printf("Case %d:
",j++);
    for(int i=lmax;i<=rmax;i++)
    if(i==lmax)
    printf("%d",p[i]);
    else printf(" %d",p[i]);
    printf("

");
    memset(p,0,sizeof(p));
    
    }
    
       return 0;
}

 

以上是关于J - 下落的树叶 ( 输入函数要有返回值!)的主要内容,如果未能解决你的问题,请参考以下文章

6-10 下落的树叶 uva699

下落的树叶 (The Falling Leaves UVA - 699)

[HAOI2008]下落的圆盘

函数基础之函数的返回值04

进阶 第一课:函数

c语言函数返回数组