蓝桥杯16

server/2025/3/19 22:24:21/

文章目录

      • 题目描述
      • 输入格式
      • 输出格式
      • 样例输入与输出
        • 样例输入 1
        • 样例输出 1
        • 样例输入 2
        • 样例输出 2
        • 样例说明
      • 评测用例规模与约定
      • 思路分析
        • 问题核心
        • 思路拆解
      • 代码段
      • 代码逐行讲解
      • 复杂度分析
      • 总结的知识点

题目描述

一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位等)上的数字是奇数,偶数位(十位、千位、十万位等)上的数字是偶数,我们就称之为“好数”。

给定一个正整数 ( N ),请计算从 1 到 ( N ) 一共有多少个好数。

输入格式

一个整数 ( N )。

输出格式

一个整数代表答案。

样例输入与输出

样例输入 1
24
样例输出 1
7
样例输入 2
2024
样例输出 2
150
样例说明

对于第一个样例,24 以内的好数有 1、3、5、7、9、21、23,一共 7 个。

评测用例规模与约定

  • 对于 10% 的评测用例,( 1 \leq N \leq 100 )。
  • 对于 100% 的评测用例,( 1 \leq N \leq 10^7 )。

思路分析

问题核心

判断一个数是否为“好数”,并统计从 1 到 ( N ) 中有多少个这样的数。

思路拆解
  1. 定义好数

    • 奇数位(从右往左数的第一个、第三个、第五个……)上的数字必须是奇数。
    • 偶数位(从右往左数的第二个、第四个、第六个……)上的数字必须是偶数。
  2. 遍历每个数

    • 对于每一个数,检查其每一位是否满足上述条件。
    • 如果满足条件,则计数器加一。

代码段

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();sc.close();int ans = 0;for (int i = 1; i <= n; i++) {if (func(i)) {ans++;}}System.out.println(ans);}private static boolean func(int count) {int x = 1;while (count != 0) {int t = count % 10;if (x % 2 == 1) { // 奇数位if (t % 2 == 0) return false; // 奇数位上的数字必须是奇数} else { // 偶数位if (t % 2 == 1) return false; // 偶数位上的数字必须是偶数}x++;count /= 10;}return true;}
}

在这里插入图片描述

代码逐行讲解

  1. 读取输入数据

    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    sc.close();
    int ans = 0;
    
    • 读取输入的整数 ( N )。
    • 初始化计数器 ans 为 0。
  2. 遍历每个数并检查是否为好数

    for (int i = 1; i <= n; i++) {if (func(i)) {ans++;}
    }
    
    • 遍历从 1 到 ( N ) 的每个数。
    • 调用函数 func(i) 检查当前数是否为好数,如果是则计数器 ans 加一。
  3. 函数 func 实现

    private static boolean func(int count) {int x = 1;while (count != 0) {int t = count % 10;if (x % 2 == 1) { // 奇数位if (t % 2 == 0) return false; // 奇数位上的数字必须是奇数} else { // 偶数位if (t % 2 == 1) return false; // 偶数位上的数字必须是偶数}x++;count /= 10;}return true;
    }
    
    • 初始化变量 x 为 1,表示当前处理的是第几位数字。
    • 使用 while 循环逐位处理数字 count
      • 取出当前最低位数字 t
      • 如果当前位是奇数位(x % 2 == 1),则检查该位是否为奇数。
      • 如果当前位是偶数位(x % 2 == 0),则检查该位是否为偶数。
      • 更新 xcount,继续处理下一位。
    • 如果所有位都满足条件,则返回 true,否则返回 false
  4. 输出结果

    System.out.println(ans);
    

复杂度分析

  • 时间复杂度:对于每个数需要遍历其每一位,假设 ( N ) 的最大值为 ( 10^7 ),则最坏情况下时间复杂度为 ( O(N \cdot d) ),其中 ( d ) 是数的最大位数。在本题中,( d ) 不超过 8,因此总的时间复杂度为 ( O(N) )。
  • 空间复杂度:只使用了常数级别的额外空间,即 ( O(1) )。

总结的知识点

  1. 数字处理:如何通过模运算和除法操作逐位处理一个整数。
  2. 条件判断:根据题目要求对每个位进行奇偶性判断。
  3. 循环控制:使用 for 循环遍历范围内的所有数,并调用辅助函数进行判断。
  4. 输入输出处理:使用 Scanner 进行输入输出操作。

http://www.ppmy.cn/server/176354.html

相关文章

解决SpringCloud整合Nacos启动报java.lang.IllegalArgumentException: illegal dataId

解决SpringCloud整合Nacos启动报java.lang.IllegalArgumentException: illegal dataId 问题发现问题解决 问题发现 在跟着Nacos官网学习搭建微服务过程中碰到illegal dataId错误&#xff0c;配置文件如下&#xff1a; spring:application:name: sc-nacos-productcloud:nacos:…

el-table 插槽踩过的坑 :slot-scope 和#default的区别

slot-scope和#default是Vue中用于定义插槽的两种不同语法&#xff0c;它们在Vue 2和Vue 3中有不同的应用场景和语法规则。‌ slot-scope 在‌Vue 2.x‌中&#xff0c;slot-scope是用于声明具名插槽并获取父组件传递过来的数据的主要方式。通过slot-scope可以定义一个变量scop…

Obsidian Copilot:打造你的专属 AI 笔记助手

Obsidian Copilot作为一款非常受欢迎的Obsidian插件&#xff0c;不仅极大地提升了用户的笔记管理和信息检索效率&#xff0c;还通过其多样化的AI功能为用户带来了前所未有的便捷体验。本文将详细介绍Obsidian Copilot的核心特点、使用方法及个人体验分享。 核心特点 Obsidian…

QT编译器mingw与msvc区别及环境配置

一.QT编译器mingw与msvc主要区别 二.QT开发环境配置 1. MinGW 配置 安装步骤&#xff1a; 通过 Qt 官方安装器 安装时勾选 MinGW 组件&#xff08;如 Qt 6.7.0 MinGW 64-bit&#xff09;。 确保系统环境变量包含 MinGW 的 bin 目录&#xff08;如 C:\Qt\Tools\mingw1120_64…

Blender材质 - 层权重

层权重 混合着色器 可以让 面朝向的一面显示一种材质 另一面显示另一种材质 就能实现挺不错的材质效果 移动视角 材质会跟着变化 有点类似虚幻的视差节点BumpOffset

【STM32】WIFI

WIFI(2.4G/5G【实际5.8G】) ---------------------------------------------- 1. LAN、WAN、WLAN、WIFI解释 LAN&#xff1a;局域网 WAN&#xff1a;广域网 WLAN&#xff1a;无线局域网 WIFI: 是一种基于IEEE 802.11标准的无线局域网技术 2.常见术语 a) WM(无线媒介)&#xf…

Linux中安装Git

安装Git 安装git&#xff0c;我们可以使用yum指令在线安装&#xff0c;这里&#xff0c;我们先对yum做一个简单介绍。 执行下面命令 #查看可用的git安装包 yum list git #安装git yum install -y git 查看git安装包 安装git 验证是否安装成功 安装完毕之后&#xff0c;我们…

软件测试之测试覆盖率

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 我们将讨论测试覆盖率的相关问题&#xff0c;以及它如何帮助提高软件质量的。 测试覆盖率概述 测试覆盖率被定义为一种测试技术指标&#xff0c;它表明我们的…