思路:枚举所有数,每个数分别判断。代码时间复杂度虽然是n^2,但是由于判断的数长度最长是7位,用字符串处理最多只循环7次,所以最大时间复杂度小 7*10的七次方,不会超时。库中的to_string时间复杂度太大,使用会超时。
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
bool charge(string x){
int k = 1;
int len = x.size();
for(int i=0;i<len;i++){
if(k%2==1&&x[i]%2==1){k++;continue;}
else if(k%2==0&&x[i]%2==0){k++;continue;}
else return false;
}
return true;
}
string my_to_string(int x){
string sx="";
while(x){
sx.push_back(x%10+'0');
x/=10;
}
return sx;
}
void solve(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int n;cin>>n;
int ans=0;
for(int i=1;i<=n;i++){
if(charge(my_to_string(i)))ans++;
}
cout<<ans<<endl;
}
signed main(){
int T=1;
while(T--)solve();
return 0;
}