题目一
<种树>:
正确代码:
#include<stdio.h>
int main()
{
int L,m,i,j,sum=0;
scanf("%d %d",&L,&m);
int p[L+1];
for(i=0;i<L+1;i++)
{
p[i]=1;
}
while(m--){
int a,b;
scanf("%d %d",&a,&b);
for(i=a;i<=b;i++)
{
p[i]=0;
}
}
for(i=0;i<L+1;i++)
{
sum+=p[i];
}
printf("%d",sum);
}
解析:
给的L的范围可以到10000,以为一个一个循环会超时,谁知道可以。
用数组p[L+1]来标记每颗树,一开始都标记为1,表示存在,接下来进入循环,把规定区段内的树标记为0,表示不存在。接下来就遍历数组就完事了,得到的sum就是剩余树的数量。
题目二
<01串>:
正确代码:
#include<stdio.h>
#include<string.h>
int main(){
char str[100000];
int cnt0=0,cnt1=0,sum=0,i,len;
gets(str);
len=strlen(str);
for(i=0;i<len;i++){
if(str[i]=='1') cnt1++;
if(str[i]=='0') cnt0++;
if(cnt1>0&&cnt0>0){
sum++;
cnt1=0;
cnt0=0;
}
}
printf("%ld",sum);
}
解析:
也算是一种标记吧,遇到一个1,cnt1次数加一,遇到0,cnt0次数加一,只要cnt1和cnt0都同时大于0了,sum次数加一,之后把cnt1和cnt0都归零,方便下次标记。
-----------------------------------------------------------------------------------------
今天状态非常差,思路非常混乱,就解出来三道简单题,可能还是太菜的原因吧。
但这些题也解决了,都不会才能学到东西,有收获!
大佬很多,虚心学习。
敲去吧你个垃圾!