大牛们,救救小白!

P1047 [NOIP2005 普及组] 校门外的树

你这句话有问题 ```cpp for(int m=a[0][x];m<=a[0][x];m++) ``` 初始值与终止相同
by wkjwkj @ 2020-02-07 20:21:30


@[Brucehjh2006](/user/315080) 说清楚,是怎么了?
by MicroMaker @ 2020-02-07 20:21:42


你的这个代码问题有点多;首先,你貌似没有理解数组定义的规则,例如:int a[1][M-1];你定义的这个数组是达到不了a[1][n]这种的,如果你想开到1,应该定义a[2][M-1],其他也是一样,另外,由于这道题中,你用一个数组的下标来表示树的坐标,所以建议你下标从1开始,但考虑到一排树的头和尾都有树,那么0这个位置也是有树的,那么应该定义的数组范围是t[L]其中应该是从0~L;其次,for(int m=a[0][x];m<=a[0][x];m++)这一句也出现了问题,应该是循环从地铁站的左到右,那么你应该改为for(int m=a[0][x];m<=a[1][x];m++);在其次,在 for(int i=0;i<=M-1;i++)中,应该尝试去理解变量的意思,在你的代码中,M代表是地铁站的数量而非树的数量,应该改为L。 ## **给你改的代码如下(按上文的意思做了改动)** ```cpp #include <bits/stdc++.h> using namespace std; int main() { int L,M; scanf("%d%d",&L,&M); int a[2][M+1]; for(int i=1;i<=M;i++) { cin>>a[0][i]>>a[1][i]; } bool t[L+1]; for(int i=0;i<=L;i++) { t[i]=true; } for(int x=1;x<=M;x++) { for(int m=a[0][x];m<=a[1][x];m++) { t[m]=false; } } int out=0; for(int i=0;i<=L;i++) { if(t[i]==true) { out++; } } printf("%d",out); return 0; } ```
by C_hzh @ 2020-02-07 20:51:25


自学的(^-^)
by Brucehjh2006 @ 2020-02-08 08:38:34


Thanks\!
by Brucehjh2006 @ 2020-02-08 08:39:51


大家真热心啊\!
by Brucehjh2006 @ 2020-02-08 08:51:17


|