直接枚举 + 模拟即可,无需优化,不要小瞧了 C++ 的速度。
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
int n;
bool check(int x)
{
int k = 1;
while (x)
{
if ((x & 1) != (k & 1))
return false;
x /= 10;
k ++;
}
return true;
}
int main()
{
cin >> n;
int res = 0;
for (int i = 1; i <= n; i += 2 )
res += check(i);
cout << res << endl;
return 0;
}
((x & 1) != (k & 1))需要加括号,需要考虑优先级
感谢指正~
x & 1 != k & 1 换成直接取余数不行吗
可以的