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

揭秘:20万内数位和能被5整除的数(十六届蓝桥杯真题)

#include <stdio.h>

int main()
{
int n = 202504;
int count = 0;

for(int i = 0;i <= n;++i)
{
int num = i;
int sum = 0;
while(num > 0)
{
sum += num % 10;
num /= 10;
}
if(sum % 5 == 0) count ++;
}
printf("%d\n",count);

return 0;
}

这道题其实是在解决一个数学统计问题。它的任务很明确:找出 0 到 202504 之间,所有“各个数位相加的和”能被 5 整除的数,并统计一共有多少个。

🎯 设定目标

  • n = 202504:这是我们要检查的终点。
  • count = 0:这是一个计数器,就像你手里拿的一个tally(计数器),初始为0。每发现一个符合条件的数,就给这个计数器加1

🔁 逐个排查(外层循环)

  • 这是一个大循环。程序会从i = 0开始,一直数到i = 202504
  • 每次循环,i就代表当前正在检查的那个数字。
  • 注意:代码里写的是i = 0。虽然题目通常问“1 至...”,但在数位和的逻辑里,0的和是 0(也是 5 的倍数)。如果题目严格要求从 1 开始,这里应该改为i = 1。不过对于 20 万这么大的量级,多算一个 0 对结果影响微乎其微。

🧮 拆解数字(内层计算)

这是代码最核心的部分,用来计算当前数字i的数位和。

为了让你看懂,我们假设当前i = 123,来看看这段代码是怎么运作的:

  1. int num = i;

    • 先把i的值(123)复制给num
    • 为什么要复制?因为我们需要保留i的原始值供循环使用,而num将被用来“拆解”,拆坏了也不心疼。
  2. while(num > 0)

    • 只要num里还有数字,就继续拆。
  3. sum += num % 10;(取末位):

    • % 10是取余数运算,也就是取最后一位数字
    • 第一次循环:123 的最后一位是3sum变为 3。
  4. num /= 10;(去末位):

    • / 10是整除运算,在 C 语言整数除法中,它会砍掉最后一位
    • 123 除以 10 变成12

接下来的循环:

  • num是 12:取末位2加到sum(3+2=5),num变为 1。
  • num是 1:取末位1加到sum(5+1=6),num变为 0。
  • num是 0:循环结束。

最终,对于数字 123,程序算出了sum = 6

✅ 判断与统计

  • sum % 5 == 0:检查刚才算出来的数位和(比如上面的 6),能不能被 5 整除。
    • 6 除以 5 余 1,不行。
    • 如果是 14(1+4=5),5 除以 5 余 0,符合条件!
  • count ++:如果符合条件,计数器加 1。

注意:

区别:++ii++

这是很多初学者容易困惑的地方。虽然在这个for循环里,它们的效果是一模一样的,但在原理上有一点点区别:

  • ++i(前缀自增)

    • 意思是:i加 1,使用i的值。
    • 比喻:先把钱存进银行,再看余额。
  • i++(后缀自增)

    • 意思是:使用i当前的值,i加 1。
    • 比喻:先看余额,再把钱存进银行。

💡 为什么在这个代码里用++i

for (int i = 0; i <= n; ++i)这一行里,++ii++的功能完全一样

因为for循环的执行顺序是:

  1. 执行循环体(大括号里的代码)。
  2. 执行步进语句(也就是这里的++i)。
  3. 判断条件(i <= n)。

在“步进语句”这个位置,程序只关心把 i 加 1这个动作,并不关心“加 1 之前的值”或者是“加 1 之后的值”。

习惯问题:
很多资深程序员习惯写++i,因为在早期 C++ 编程中,对于复杂的对象(不仅仅是整数),++i的执行效率通常比i++稍微高一点点(因为它不需要临时保存旧值)。久而久之,这变成了一种“高性能代码风格”的习惯。

http://www.jsqmd.com/news/583043/

相关文章:

  • 如何用xianyu_spider实现高效电商数据采集?从入门到精通的完整指南
  • C++ 模板类型推断原理解析
  • 2K3000常见问题合集
  • sguard_limit:优化腾讯游戏反作弊系统资源占用的技术方案
  • 一次运算仅6.34阿焦,比忆阻器低百万倍!Nature子刊单分子神经形态器件深度解读
  • 09_KnowFlow企业安全层:RBAC权限控制、数据隔离与白标交付
  • 嵌入式软件开发中的柔性数组机制
  • 告别手动调Harness!Stanford 提出 Meta-Harness,自动找到最优“模型脚手架”
  • 建筑图像提取线稿
  • Comsol 5.4版弹性波三维能带计算案例:Smart Mater. Struct. 201...
  • 如何利用 SEO 工具提取网站的外部链接
  • GuwenBERT终极指南:如何用AI解锁古文自然语言处理能力
  • 天梯赛L2-006 树的遍历
  • 【OIDC】PKCE流程
  • Kali Linux 虚拟机安装与基础配置保姆级图文教程_虚拟机安装kali教程
  • OFA图像描述系统实战:快速搭建图片转文字工具,避免常见权限错误
  • 偏振不敏感 宽带消色差长波红外超构透镜模型 色散补偿设计 FDTD仿真 超表面 复现论文:20...
  • 长生露模式系统开发
  • 成本对比:OpenClaw调用自部署SecGPT-14B与商用API的实测数据
  • 用 AI 做鸿蒙游戏 NPC,是一种什么体验?
  • 20260403 找工作感受 - 枝-致
  • # 发散创新:基于Python与OpenCV的智能交通流量实时监测系统实现 在智慧城市建设浪潮中,**智能交通系统(ITS)*
  • 米哈游2026春招(附内推):刷了200题C++,一面还是被问倒了
  • 原神帧率解锁终极指南:三步轻松突破60FPS限制
  • 基于微信小程序在线考试系统-计算机项目设计学习项目
  • 20260403_153320_通过_Claude_Code_源码,来分析_Anthropi
  • Spring AI 实战系列(十):MCP深度集成 —— 工具暴露与跨服务调用
  • 零基础友好:跟着快马生成的交互式脚本轻松完成openclaw安装入门
  • 3个场景告诉你:为什么跨平台文本编辑器Notepad--值得一试
  • thinkphp8官方文档