题目描述
两种写法,第一种NB的循环+条件判断;第二种可能会超时但值得一试的大炮打蚊子
第一种
这个应该容易看懂
#include <stdio.h>
int main()
{
int n,i;
scanf("%d",&n);
for(;n>0;n--)
{
for(int m=n;m>0;)
{
if(m%2!=0)m/=10;
else break;
if(m%2==0)m/=10;
else break;
if(m==0)i++;
}
}
printf("%d",i);
return 0;
}
第二种
试着用了vector做了下,有点浪费时间
C++ 代码
#include <iostream>
#include <vector>
using namespace std;
//求出位数的函数:
int solve1(int n){
int tmp = n;
int weishu = 0;
while(tmp!=0){
weishu++;
tmp/=10;
}
return weishu;
}
int main()
{
int cnt = 0;
int num;
cin>>num;
for(int i=1;i<=num;i++){
//对于每一个i进行分析
vector<int>v;
//先算出number的位数
int w = solve1(i);
int tmp = i;
for(int j=0;j<w;j++){
int temp = tmp%10;
v.push_back(temp);
tmp = tmp/10;
}
//vector 里面存好数字后,
int flag = 0;
for(int i=0;i<w;i++){
//奇数位
if(i%2==0){
if(v[i]%2==0)flag = 1;
}
//偶数位
else if(i%2!=0){
if(v[i]%2!=0)flag = 1;
}
}
//根据flag判断是否是好数
if(flag == 1){
continue;
}
else if(flag == 0){
cnt++;
}
}
cout<<cnt;
return 0;
}
第一种:先判断个位奇数,之后十位偶数,如果判断完/10还有位数,继续循环判断