好数 第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

embedded/2025/3/25 21:09:40/

好数

题目来源

第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

原题链接

蓝桥杯 好数

问题描述

P10424 [蓝桥杯 2024 省 B] 好数

题目描述

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

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

输入格式

一个整数 N N N

输出格式

一个整数代表答案。

输入输出样例 #1

输入 #1

24

输出 #1

7

输入输出样例 #2

输入 #2

2024

输出 #2

150

说明/提示

样例 1 解释

24 24 24 以内的好数有 1 , 3 , 5 , 7 , 9 , 21 , 23 1,3,5,7,9,21,23 1,3,5,7,9,21,23,一共 7 7 7 个。

数据规模与约定

  • 对于 10 % 10\% 10% 的测试数据, 1 ≤ N ≤ 100 1 \leq N \le 100 1N100
  • 对于全部的测试数据, 1 ≤ N ≤ 1 0 7 1 \le N \leq 10^7 1N107

问题分析

代码解释:

  1. check 函数

    • 功能:检查一个数字是否是“好数”。
    • 实现:
      • 将数字 x 的每一位分解并存储到数组 num 中。
      • 遍历数组 num,检查每一位是否符合“好数”的条件:
        • 奇数位(第 1、3、5… 位)必须是奇数。
        • 偶数位(第 2、4、6… 位)必须是偶数。
      • 如果所有位都符合条件,则返回 true,否则返回 false
  2. main 函数

    • 输入数字 n,表示需要检查的范围 [1, n]
    • 遍历范围 [1, n],调用 check 函数检查每个数字是否是“好数”。
    • 统计“好数”的数量并输出结果。

示例:

  • 输入:n = 20
  • 输出:10
  • 解释:在 [1, 20] 范围内,“好数”有:1, 3, 5, 7, 9, 10, 12, 14, 16, 18。

总结:

通过分解数字的每一位并检查其奇偶性,判断一个数字是否是“好数”,并统计给定范围内的“好数”数量。

完整代码

#include <iostream>
#include <algorithm>
using namespace std;const int N = 1e7 + 10;  // 定义常量 N,表示最大可能的数字范围int n;  // 定义整数 n,表示需要检查的数字范围 [1, n]// 检查一个数字是否是“好数”
bool check(int x) {int num[8];  // 定义一个数组,用于存储数字 x 的每一位数字int idx = 0; // 定义索引 idx,用于记录当前存储的位数// 将数字 x 的每一位分解并存储到数组 num 中while (x) {num[idx++] = x % 10;  // 取出当前最低位数字,并存储到 num 中x /= 10;              // 去掉最低位,继续处理下一位}// 遍历数组 num,检查每一位是否符合“好数”的条件for (int i = 0; i < idx; i++) {// 如果当前是奇数位(第 1、3、5... 位),但数字是偶数,则不是“好数”if ((i + 1) % 2 == 1 && num[i] % 2 == 0) return false;// 如果当前是偶数位(第 2、4、6... 位),但数字是奇数,则不是“好数”if ((i + 1) % 2 == 0 && num[i] % 2 == 1) return false;}// 如果所有位都符合条件,则是“好数”return true;
}int main() {// 输入数字 n,表示需要检查的范围 [1, n]scanf("%d", &n);int res = 0;  // 定义结果变量 res,用于统计“好数”的数量// 遍历范围 [1, n],检查每个数字是否是“好数”for (int i = 1; i <= n; i++) {if (check(i)) res++;  // 如果是“好数”,则 res 加 1}// 输出“好数”的总数printf("%d", res);return 0;
}

http://www.ppmy.cn/embedded/174547.html

相关文章

The method precision() is undefined for the type BigInteger

The method precision() is undefined for the type BigInteger 不晓得那个版本里面有这个方法来着 java.math.BigInteger.bitLength()

工程化与框架系列(36)--前端监控告警实践

前端监控告警实践 &#x1f514; 引言 前端监控是保障应用质量和用户体验的重要手段。本文将深入探讨前端监控的实现方案&#xff0c;包括性能监控、错误监控、用户行为监控等方面&#xff0c;以及相应的告警机制。 监控系统概述 前端监控系统主要包括以下方面&#xff1a;…

【Oracle资源损坏类故障】:详细了解坏块

目录 1、物理坏块与逻辑坏块 1.1、物理坏块 1.2、逻辑坏块 2、两个坏块相关的参数 2.1、db_block_checksum 2.2、db_block_checking 3、检测坏块 3.1、告警日志 3.2、RMAN 3.3、ANALYZE 3.4、数据字典 3.5、DBVERIFY 4、修复坏块 4.1、RMAN修复 4.2、DBMS_REPA…

解锁C++标准库:从理论到实战的进阶指南

目录 一、引言:C++ 标准库的魅力 二、C++ 标准库初相识 2.1 标准库的构成 2.2 导入标准库的方式 三、实战案例解析 3.1 数值计算:库的应用 3.2 容器与算法:库的优势 3.3 文件操作:库的实践 3.4 字符串处理:库的应用 四、使用 C++ 标准库的注意事项 4.1 命名空间…

Flutter运行错误:UG! exception in phase ‘semantic analysis‘

最近在Mac Mini M4上通过Android Studio导入Flutter项目并运行&#xff0c;结果一直跑不起来&#xff0c;错误日志如下&#xff1a; 执行命令查看版本信息&#xff1a; flutter doctor --verbose通过输出信息Java version OpenJDK Runtime Environment (build 21.0.41242208…

技术分享 | MySQL内存使用率高问题排查

本文为墨天轮数据库管理服务团队第51期技术分享&#xff0c;内容原创&#xff0c;如需转载请联系小墨&#xff08;VX&#xff1a;modb666&#xff09;并注明来源。 一、问题现象 问题实例mysql进程实际内存使用率过高 二、问题排查 2.1 参数检查 mysql版本 &#xff1a;8.0.…

【江协科技STM32】软件I2C协议层读写MPU6050驱动层

回顾知识点&#xff1a; 【STM32】I2C通信协议&MPU6050芯片-学习笔记-CSDN博客 接线图 整体思路 I2C初始化 软件I2C只需要用GPIO读取函数就可以&#xff0c;不用I2C库函数&#xff1b; ① 把SCL和SDA都初始化成开漏输出模式&#xff08;开漏输出不只是只能输出、也可以输…

C# 语法糖

三元运算符 &#xff1f;&#xff1a; 使用前 int value -2; if (value < 0) {value 0; } else {value 1; } 使用后 int value -2; value value < 0 ? 0 : 1; Null 合并操作符 &#xff1f;&#xff1f; 使用前 string value GetString(); if (value null…