这个哪里有错啊

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

麻烦您能不能把代码打成一排排的
by xieyihang @ 2018-06-23 23:10:13


两行之间按两次enter就可以换行,或者直接用功能表里“插入代码”一项插入也行
by xieyihang @ 2018-06-23 23:11:25


经本蒟蒻人工排版的您的代码 ``` #include<iostream> using namespace std; int a[100],b[100],flag[10000]={1}; int main() { int l,m,i,j,x=0; cin>>l>>m; for(i=0;i<=m-1;i++) { cin>>a[i]>>b[i]; for(j=0;j<=l;j++) if(j>=a[i]&&j<=b[i]) flag[j]=0; } for(j=0;j<=l;j++) if(flag[j]==1) x++; cout<<x; return 0; } ``` 嗯?哪里有错?for循环那里好像漏了几个大括号
by Ophelia @ 2018-06-27 14:39:47


等等,不对,我再看看
by Ophelia @ 2018-06-27 14:41:01


是这样的,您的flag数组,也就是标记数组初始化的时候只初始化了第一个值,后面的值还是0。所以最后答案是1。 应该用一个for循环初始化所有值,或者memset(flag,a,1,sizeof(flag))初始化。 下面是本蒟蒻修改过+人工排版的代码 ``` #include<iostream> using namespace std; int a[100],b[100],flag[10000]; int main() { int l,m,i,j,x=0; cin>>l>>m; for(int i=0;i<=l;i++) flag[i]=1; for(i=0;i<=m-1;i++) { cin>>a[i]>>b[i]; for(j=0;j<=l;j++) { if(j>=a[i]&&j<=b[i]) flag[j]=0; } } for(j=0;j<=l;j++) { if(flag[j]==1) x++; } cout<<x; return 0; } ```
by Ophelia @ 2018-06-27 14:46:40


|