【蓝桥杯】好数


好数

问题描述

一个整数如果按从低位到高位的顺序,奇数位 (个位、百位、万位 ⋯ ) 上的数字是奇数,偶数位 (十位、千位、十万位 ⋯ ) 上的数字是偶数,我们就称之为 “好数”。
给定一个正整数 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

代码解释

good函数:该函数用于判断一个数是否为好数。通过逐位检查,奇数位必须为奇数,偶数位必须为偶数。若某位不符合条件,立即返回0,否则返回1。

主函数:读取输入N,遍历从1到N的每个数,调用good函数检查是否为好数,统计符合条件的好数个数并输出。
该方法虽然简单,但在给定的问题规模下能够高效完成任务

代码

import java.util.Scanner;

public class Main {
  public static int good(int a){
    int t=1;
    while(a!=0){
      int x=a%10;
      if(t%2==1){
         if(x%2==0)
          return 0;
      }else{
        if(x%2==1)
          return 0;
      }
      a/=10;
      t++;
    }
    return 1;
  }

  public static void main(String[] args){
      Scanner sc=new Scanner(System.in);
      int n=sc.nextInt();//n<=10^7
      int count=0;
      for(int i=1;i<=n;i++){
      if(good(i)==1){
        count++;
      }
    }
    System.out.println(count);
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值