问题描述
一个整数如果按从低位到高位的顺序,奇数位 (个位、百位、万位 ⋯⋯ ) 上的数字是奇数,偶数位 (十位、千位、十万位 ⋯⋯ ) 上的数字是偶数,我们就称之为 “好数”。
给定一个正整数 N,请计算从 1 到 N 一共有多少个好数。
输入格式
一个整数 N。
输出格式
一个整数代表答案。
样例输入 1
24
样例输出 1
7
样例输入 2
2024
样例输出 2
150
样例说明
对于第一个样例,24 以内的好数有 1、3、5、7、9、21、23,一共 77 个。
评测用例规模与约定
对于 10%的评测用例,1≤𝑁≤100 。
对于 100% 的评测用例,1≤𝑁≤107 。
题解1(逆向思维)
int main(int argc, char *argv[])
{
int n,bad=0;
scanf("%d",&n);
for(int m=1;m<=n;m++){
int b=0;
int a=m;
int count=0;
while(a>0){
b=a%10;
a/=10;
count++;
if(count%2==0&&b%2!=0||count%2!=0&&b%2==0){
bad++;
break;
}
}
}
printf("%d",n-bad);
return 0;
}
题解2(正向,条件判断,顺序)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,sum;
scanf("%d",&n);
for(;n>0;n--)
{
int m=n;
while(m>0)
{
if(m%2!=0)m/=10;
else break;
if(m%2==0)m/=10;
else break;
if(m==0)sum++;
}
}
printf("%d",sum);
return 0;
}