蓝桥云客 好数
0好数 - 蓝桥云课
问题描述
一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位…)上的数字是奇数,偶数位(十位、千位、十万位…)上的数字是偶数,我们就称之为“好数”。
给定一个正整数 N,请计算从 1 到 N 一共有多少个好数。
输入格式
一个整数 N。
输出格式
一个整数代表答案。
样例输入 1
24
样例输出 1
7
样例输入 2
2024
样例输出 2
150
样例说明
对于第一个样例,24 以内的好数有 1、3、5、7、9、21、23,一共 7 个。
评测用例规模与约定
- 对于 10% 的评测用例,1≤N≤100。
- 对于 100% 的评测用例,1≤N≤1e7。
思路:
题目很简单,我们只需要知道用一个变量替代下标分析即可。
代码如下:
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
typedef long long ll;
ll n;
bool check(ll x)
{
ll cnt = 1;
while(x)
{
ll dig = x % 10;
if(cnt % 2 == 0)//偶数位置
{
if(dig % 2 != 0)//但是是奇数
{
return false;
}
}
else if(cnt % 2 != 0)//奇数位置
{
if(dig % 2 == 0)//但是是偶数
{
return false;
}
}
cnt++;
x = x / 10;
}
return true;
}
int main()
{
ll ans = 0;
cin >> n;
for(ll i = 1 ; i <= n ; i++)
{
if(check(i))
{
// cout << i << " ";
ans++;
}
}
// cout << endl;
cout << ans;
return 0;
}