试题C: 好数
时间限制: 1.0s 内存限制: 256.0MB 本题总分:10分
【问题描述】
一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位···)上 的数字是奇数,偶数位(十位、千位、十万位···)上的数字是偶数,我们就称 之为“好数”。
给定一个正整数N,请计算从1到N一共有多少个好数。
【输入格式】
一个整数N。
【输出格式】
一个整数代表答案。
【样例输入1】
24
【样例输出1】
7
【样例输入2】
2024
【样例输出2】
150
【样例说明】
对于第一个样例,24以内的好数有1、3、5、7、9、21、23,一共7个。
【评测用例规模与约定】
对于10%的评测用例,1≤N≤100。
对于100% 的评测用例,1≤N≤10的7次方。
解析:
我们定义个变量,让它初始化为1(表示第一位数个位)每判断一次就加1;
用个函数表示判断符合就返回1,否则就返回0;
输入个n, 创个循环(从1到n)一次次判断,定义个变量(表示计数)每判断成功就加1
代码:
#include<stdio.h>
#include<string.h>
int main(){int i,n,num=0;scanf("%d",&n);//输入n的值for(i=1;i<=n;i++){//从1到n 的循环 if(s(i)){num++;//num是计数,符合就加1 }}printf("%d",num);//输出有几个符合 return 0;
}
int s(int x){int i,n=1;//while(x){//让每一位数都显示出来 从个位开始 if(n%2==1){if(x%10%2==0){//判断奇数位是否是奇数 return 0;//不是就返回0 }x=x/10;//是就继续 n++;}else{//偶数位if(x%10%2==1){//判断偶数位是否是偶数return 0; //不是就返回0}x=x/10;//是就继续 下一位 n++;//位数也加一位 }}return 1;//全部符合就返回1
}