题目名字 P10424 [蓝桥杯 2024 省 B] 好数 题解
题意
给一个整数n,从1到n这个区间范围内,每一个数位为偶数的数字为偶数且数位为奇数的数字为奇数,那么这个数就是好数
思路
- 首先确认所有的条件都必须要满足,奇对奇,偶对偶
- 这个很显然就是需要枚举,因为1------n这个范围内的数字都需要判断
- 那么就可以用bool函数判断每一个数字是否是好数,在主函数里面就负责把每个函数都过一遍
- 那就可以用一个数来专门去判断数位,从个位数开始判断,然后设置当这个数位为奇数时这个数是否是奇数的判断,判断完之后,数位依次递增,这个数依次减小因为需要把这个数的末尾数给剪掉,那么就欧克了
坑点
- 脑子没转过来,123的个位数是3不是1hhh该睡了,其他没有难点了
- 主要是复习了枚举和bool函数
算法一:枚举和bool
实现步骤
bool判断,如果不满足条件直接return false,都满足直接return true
再加一个内部优化,当这个函数的末尾数是偶数可以直接pass,这样就不需要bool判断了
x
代码
cpp
#include<iostream>
using namespace std;
bool check(int x){
int cnt=1;//记数位
while(x){
int b=x%10;
if(cnt%2==1)//是奇数 {
if(b%2!=1) return false;
}
else if(b%2!=0) return false;
cnt++;
x/=10;
}
return true;
}
int main(){
long long int n;
int ans=0;
cin>>n;
for(int i=1;i<=n;i++){
if(i%10%2==0){
continue;
}
if(check(i)){
ans++;
}
}
cout<<ans;
return 0;
}
总结
真的很简单的一道题,但是居然因为觉得最后一个数字是最大的那个数位上的数,纠结了两个小时,好无语啊,以后写还是需要拿笔去写,脑子清楚一点,拜托。。