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:\n",j++); for(int i=lmax;i<=rmax;i++) if(i==lmax) printf("%d",p[i]); else printf(" %d",p[i]); printf("\n\n"); memset(p,0,sizeof(p)); } return 0; }