corecode @ 2022-08-28 15:30:19
#include<stdio.h>
int main()
{
int m,l,a[2]/*u,v*/,b[10000]/*将l分成若干个整数*/,n=0/*剩余树木*/,i,j;
for(i=0;i<=l;i++)
b[i]=0;
scanf("%d%d",&l,&m);
for(i=1;i<=m;i++)
{
for(j=0;j<=1;j++)
{
scanf("%d",&a[j]);
}
for(i=0;i<=l;i++)
if(i>=a[0]&&i<=a[1])//比较l内一整数是否在区间【a[0],a[1]】内
{
b[i]=1;//有重复区域的题目宜赋值,而不易直接加减
}
}
for(i=0;i<=l;i++)
{
if(b[i]=0)
n++;
}
printf("%d",n);
return 0;
}
by Jim777 @ 2022-08-28 15:39:13
这道题我之前写过,先拿去参考一下吧。
#include<iostream>
using namespace std;
int arr[10005];
int l,m,u,v,sum=0;
int main(){
cin>>l>>m;
for(int i=1;i<=m;i++){
cin>>u>>v;
for(int j=u;j<=v;j++){
arr[j]=1;
}
}
for(int i=0;i<=l;i++){
if(arr[i]==0){
sum++;
}
}
cout<<sum;
return 0;
}
by Jim777 @ 2022-08-28 15:40:32
这道题可以用索引的角度去写
by Cubic @ 2022-08-28 15:50:28
#include<iostream>
using namespace std;
int n, b, l, r, cnt, a[10001];
int main(){
cin >> n >> b;
for(int i = 0; i <= n; i++){
a[i] = 1;
}
for(int i = 0; i < b; i++){
cin >> l >> r; //起始点为l,终止点为r
for(int j = l; j <= r; j++){ //标记第l棵树到第r棵树(如题意:种过的树)
a[j] = 0;
}
}
for(int i = 0; i <= n; i++){
if(a[i] == 1){ //只要这棵树没被标记(种)过,就把用来统计的变量++
cnt++;
}
}
cout << cnt;
return 0;
}
很抱歉蒟蒻看不懂您的代码,真的很想帮您改,写了注释,我个人认为我自己的代码挺好理解的
by Cubic @ 2022-08-28 15:51:30
@corecode
by Cubic @ 2022-08-28 15:55:04
您的"for(j = 0; j <= 1; j++)"是不是写错了?
by WZWZWZWY @ 2022-08-28 16:21:13
在康你的程序之前,不得不吐槽两句:
by WZWZWZWY @ 2022-08-28 16:29:42
还有,for(i……)的内层还用for(i……),会改变外层循环的值,可能会导致只进行一次
by WZWZWZWY @ 2022-08-28 16:41:51
小小地修改了一下
#include<stdio.h>
int main()
{
int m,l,b[10001],n=0,i,j,k,q;
scanf("%d",&l);//你应该在这里输入l
for(i=0;i<=l;i++)
b[i]=0;
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%d%d",&j,&k);
for(q=0;q<=l;q++)
if(q>=j&&q<=k)//比较l内一整数是否在区间【j,k】内
{
b[q]=1;
}
}
for(i=0;i<=l;i++)
{
if(b[i]==0)//不能是b[i]=0
n++;
}
printf("%d",n);
return 0;
}
当然还可以再优化,把
for(q=0;q<=l;q++)
if(q>=j&&q<=k)
{
b[q]=1;
}
改成:
for(q=j;q<=k;q++)
b[q]=1;
祝你学习进步! @corecode
by corecode @ 2022-08-28 18:41:15
@WZRYWZWY 为什么10000要改成10001
by corecode @ 2022-08-28 18:51:28
@WZRYWZWY ```c for(i=1;i<=m;i++) { scanf("%d%d",&j,&k); for(q=0;q<=l;q++) if(q>=j&&q<=k)//比较l内一整数是否在区间【j,k】内 { b[q]=1; } }
这一段是说在循环的时候j,k就可以变而不需要用到数组吗