当前位置: 首页 > news >正文

[特殊字符] 2025蓝桥杯备赛Day11——P11041 [蓝桥杯 2024 省 Java B] 报数游戏

🔍 2025蓝桥杯备赛Day11——P11041 [蓝桥杯 2024 省 Java B] 报数游戏

🚀 题目速览

题目难度:⭐️⭐️⭐️(需要数论与二分法结合)

考察重点:容斥原理、二分搜索、最小公倍数计算

(当然也可以直接用数学知识做题,判断并记录偶数次数,24 * 2 * 偶数次数,也就是暴力枚举,代码好像不行,用excel)

题目描述

小蓝和朋友们在玩一个报数游戏。由于今年是 2024 2024 2024 年,他们决定要从小到大轮流报出是 20 20 20 24 24 24 倍数的正整数。前 10 10 10 个被报出的数是: 20 , 24 , 40 , 48 , 60 , 72 , 80 , 96 , 100 , 120 20,24,40,48,60,72,80,96,100,120 20,24,40,48,60,72,80,96,100,120。请问第 202420242024 202420242024 202420242024 个被报出的数是多少?

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只输出这个整数,填写多余的内容将无法得分。

输入格式

本题无输入。

输出格式

一行一个整数,表示你算出的答案。

🔥 解法:暴力枚举

🛠️ 实现思路

核心逻辑

  1. 从小到大遍历每个正整数
  2. 检查当前数是否为20或24的倍数
  3. 统计满足条件的数直到找到第N个

缺陷

  • 时间复杂度为 O(K)(K为最终结果值),当N=2e12时完全不可行
  • 仅适用于极小的N值(如N≤1e5)
#include<bits/stdc++.h>
using namespace std;
long long N = 202420242024;

int main(){
    // 计算从1到N的偶数数量
    long long count = 0;
    
    for(int i=1;i<=N;i++){
  	  if(N%2==0) count++; 	
	}
    
    // 根据提供的公式计算n
    long long n = 2 * count * 24;
    
    // 输出n=2429042904288
    cout << n << endl;
    
    return 0;
}

🔥 最优解法:二分法 + 容斥原理

🛠️ 实现思路

核心数学工具

  1. 容斥原理:计算范围内20或24的倍数的总数
  2. 二分法:快速定位第N个数的值

关键公式

 count(x) = x//20 + x//24 - x//120

其中120是20和24的最小公倍数(LCM)。

代码实现

#include <iostream>
#include <numeric>  // 包含gcd函数
using namespace std;
using ll = long long;

int main() {
    const ll N = 202420242024LL;
    ll low = 1, high = 20 * N;  // 初始二分边界
    const ll lcm_20_24 = 20 * 24 / gcd(20, 24);  // LCM(20,24)=120

    while (low < high) {
        ll mid = low + (high - low) / 2;  // 防止溢出
        ll cnt = mid/20 + mid/24 - mid/lcm_20_24;

        if (cnt < N) low = mid + 1;  // 不足目标数量,抬高下界
        else high = mid;             // 满足条件,压低上界
    }
    cout << low;  // 输出结果
    return 0;
}

📚 核心知识点解析

一、容斥原理应用

计算方式说明
20的倍数数量x // 20每20个数出现一次
24的倍数数量x // 24每24个数出现一次
公倍数数量x // 120120是LCM(20,24)=120
有效总数20倍 + 24倍 - 公倍数避免重复计数

二、二分法优化

步骤操作时间复杂度
初始化边界low=1, high=20*NO(1)
二分循环每次将搜索范围减半O(logN)
最终定位low==high时即为答案O(1)

三、暴力枚举的局限性

维度说明
时间复杂度O(K)(K≈2e12时需数十年计算)
内存消耗O(1)
适用场景仅用于教学演示或极小的N值(如N≤1e5)

🚨 易错点警示

  1. LCM计算错误

    # 错误:直接相乘未除GCD
    lcm = 20 * 24  # 得到480(正确应为120)
    # 正确计算方式
    from math import gcd
    lcm = 20 * 24 // gcd(20, 24)
    
  2. 二分边界设置不足

    Pythonhigh = 20 * n  # 可能不够大
    # 安全设置
    high = 2 * 10**30  # 足够覆盖所有可能情况
    

🔥 双解法对比分析

维度二分法(解法二)暴力枚举(解法一)
时间复杂度O(logN)(约40次循环)O(K)(无法完成N=2e12的计算)
空间复杂度O(1)O(1)
适用数据规模任意规模(推荐)仅限N≤1e5
工程价值竞赛标准解法仅用于教学展示
实现难度需理解数论原理逻辑简单但无法实际应用

相关文章:

  • Java 列表复制与对象引用
  • Python学习第二十五天
  • 10 个pygame经典小游戏
  • 装饰器模式 (Decorator Pattern)
  • SpringCloud消息总线:Bus事件广播与配置动态刷新
  • 基于硅基流动平台API构建定制化AI服务的实践指南
  • 大数据学习(88)-zookeeper实现的高可用(HA)
  • 【JSqlParser】Java使用JSqlParser解析SQL语句总结
  • 垃圾回收学习
  • “thrust“ has no member “device“
  • 视觉Transformer架构的前沿优化技术与高效部署
  • Linux 驱动总线中的 ACPI 设备匹配机制是怎么回事儿?【最大特点是设备的自动发现和热插拔性能良好】
  • vue 组件开发
  • C++运动控制卡开发实践指南
  • 【pm2运行ts的终极解决方案】使用pm2+ tsx 运行 TypeScript 文件指南
  • 3.25-3 request断言
  • 代码随想录算法训练营第二十天 | 字符串 | 反转字符串、替换空格、翻转字符串里的单词(很多基础方法)和左旋转字符串
  • Windows下docker使用教程
  • 【C++特殊类的设计】
  • 和鲸科技执行总裁殷自强受邀主讲华中附属同济医院大模型应用通识首期课程
  • 用java做音乐网站/外贸企业网站推广
  • html5 可以做网站吗/分销系统
  • 雄安做网站要多少钱/seo公司外包
  • java开发网站跟php开发网站区别/上海牛巨仁seo
  • 动态倒计时网站模板/青岛seo用户体验
  • 网站301设置/合肥网站seo费用