这个题求1-N之间的好数,也就是一个数字从低位到高位,奇数位是奇数,偶数位是偶数,就是一个好数.
直接for循环从1遍历到n.然后分别判断每个数是不是好数即可.
cpp代码如下:
#include<iostream>
using namespace std;
#include<string>
#include<algorithm>
int main()
{
int n=0;
cin>>n;
int count=0;
for(int i=1;i<=n;i++)
{
// 将数字转成字符串,然后反转.
string s=to_string(i);
reverse(s.begin(),s.end());
bool flag=1;
//反转后的字符串,最高位就是原本的奇数位了,然后往后遍历.
for(int j=0;j<s.size();j++)
{
//如果j能被2整除,比如0,那其实是奇数位.
if(j%2==0)
{
//奇数位如果被2整除就不符合条件.
if((s[j]-'0')%2==0)
{
flag=0;
break;
}
}else{
//偶数位不能被2整除就不符合条件.
if((s[j]-'0')%2!=0)
{
flag=0;
break;
}
}
}
//如果所有数位都符合条件,flag依然是1,然后统计次数加一次.
if(flag)count++;
}
//最后打印一下
cout<<count<<endl;
}
python代码如下:
def check(x):
# cnt标志是奇数位还是偶数位,
cnt=1
# x不为0就一直对10取模求最后一位,然后整除10去掉最后1位
while x!=0:
t=x%10
x//=10
if cnt&1:
# 如果cnt是奇数,t是偶数就不符合条件,直接返回False
if t%2==0:
return False
else:
# 如果cnt是偶数,t是奇数就不符合条件,直接返回False
if t%2==1:
return False
cnt+=1
return True
n=int(input())
count=0
for i in range(1,n+1):
if check(i):
count+=1
print(count)
python代码的话需要用到pypy3才可以通过,毕竟题目给的数量级达到了$10^7$,每判断一个数也需要一个循环.就会超时了.
原创
洛谷-P10424 [蓝桥杯 2024 省 B] 好数
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法