众所周知,勋总的最大乐趣就是挑选“1”(狗头保命),但是今天勋总自己要参加蓝桥校选,并且马上就要迟到了,为了尽快到达考场,所以他不能精心地挑选“1”了。但是勋总的宿舍里藏了许多1和0,勋总要去比赛时,随手抓了一把1和0放入书包里,勋总的书包刚好有30个空位,所以包里面最多可以容纳30个"0"或"1",本着越多越好的原则,勋总拿满了30个。
我们将背包里面从上到下的30个位置,用一个非负整数n表示,若n=7,表示书包内的状态(n的二进制形式)为000000000000000000000000000111(不用数了,前面共27个0)。
但是对于苛刻的勋总,勋总最喜欢的莫过于13个连续的"1"了,如果n内存在13个连续的1,则说明他今天成功装13了,此时我们输出YES,否则输出NO。
输入格式:
仅一行,一个非负整数n,代表书包内的状态的十进制形式
输出格式:
输出一行,为YES或NO,代表勋总今天是否成功的装13
输入样例:
1048551
输出样例:
YES
注:结尾有换行\n
样例解释
n=1048551,表示书包内的状态为000000000011111111111111100111,其中包含一段15个连续的1,即必然存在一段连续的13个1,故输出为YES
数据规模及约定
对于100%的测试点,0≤n<2^30
,
答案
第一次
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int t=0;//计数
for(int i=0;i<30;i++)
{
n=n-i;
if(n>=0)
t++;
else
t=0;
if(t==13)
{
cout<<"YES";
return 0;
}
}
cout<<"NO";
return 0;
}
应该是对于较大的数字无法实现正确计算照成的,使用减法应该是通过不了所有测试点
第二次
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int t=0;//计数
for(int i=0;i<30;i++)
{
int a,b;
a=n%2;
//b=n/2;
//if(b==0)
//break;
if(a==1)
t++;
else
t=0;
if(t==13)
{
cout<<"YES";
return 0;
}
n=n/2;
}
cout<<"NO";
return 0;
}
无需让小数字提前退出循环,因为0%2=0;