题意解释:
由题目我们可以知道,一个整数从右往左来看,她的奇数位(也就是个位、百位......)是奇数,并且它的偶数位(也就是十位、千位.......)是偶数,那么这个整数就符合好数。
因此,在解答是我们只需要来判断一个整数的 第几位数 和 此位数上的数 %2 后是否相等即可。
代码如下:
#include <bits/stdc++.h>
using namespace std;
//判断一个数是不是好数
bool check(int a){
int weishu = 1; //用于记录位数
while(a){
int b = a % 10; //将一个数的每一位拆分开
if((b % 2) == (weishu % 2)){ //判断每一个数位对应的数是否符合好数
weishu++; //当最外层的数符合好数时位数+1
a /= 10;
continue;
}
else{
return false; //如果有一次不符合就返回假
}
}
return true;
}
int main(){
int n ;
cin >> n;
int count = 0; //来记录有多少个好数
for(int i = 1; i <= n ;i++){
if(check(i)) count++; //判断通过后count+1
}
cout << count ;
return 0;
}