# P10424 [蓝桥杯 2024 省 B] 好数
## 题目描述
一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位……)上的数字是奇数,偶数位(十位、千位、十万位……)上的数字是偶数,我们就称之为“好数”。
给定一个正整数 $N$,请计算从 $1$ 到 $N$ 一共有多少个好数。
## 输入格式
一个整数 $N$。
## 输出格式
一个整数代表答案。
## 输入输出样例 #1
### 输入 #1
```
24
```### 输出 #1
```
7
```## 输入输出样例 #2
### 输入 #2
```
2024
```### 输出 #2
```
150
```## 说明/提示
### 样例 1 解释
$24$ 以内的好数有 $1,3,5,7,9,21,23$,一共 $7$ 个。
### 数据规模与约定
- 对于 $10\%$ 的测试数据,$1 \leq N \le 100$。
- 对于全部的测试数据,$1 \le N \leq 10^7$。
#include<bits/stdc++.h>
using namespace std;
bool isgood(int x)
{
int q=1;//位数
while(x)
{
int wei=x%10;
if(wei%2==q%2)
{
q++;
x/=10;
}else
{
return false;
}
}
return true;
}
int main()
{
int n,ans=0;
cin>>n;
for(int i=1;i<=n;i++)
{
if(isgood(i))
{
ans++;
}
}
cout<<ans<<endl;
return 0;
}
总结思考:
数据范围是1e7 可以直接一位一位的取,判断
精妙之处:它的位数的奇偶性与位数上所对应的相同,比如个位是第1位,要求是奇数,十位是第2位,要求是偶数