编程入门:详解“与7无关的数”筛选与求和问题
这类编程练习题最值得先看的不是题目描述而是它到底在考察什么、新手容易在哪里卡住、以及怎么写出既正确又清晰的代码。“与7无关的数”是一个经典的入门级筛选与求和问题它考察的是对整数基本操作、条件判断和循环的掌握。很多初学者一看题目觉得简单但实际写起来可能在“与7无关”的条件理解、边界处理或者求和累加的逻辑上出岔子。这篇文章就从一个写过很多类似代码的角度拆解这道题让你不仅能做出答案更能理解这类问题的通用解决思路和避坑要点。1. 先拆解“与7无关”到底是什么意思题目通常这样描述一个正整数如果它能被7整除或者它的十进制表示法中某一位上的数字为7则称这个数为“与7有关”。反之则是“与7无关”。现在给定一个范围比如n 100求这个范围内所有“与7无关”的正整数的平方和。1.1 核心条件判断三个子条件必须全部不满足“与7无关”是“与7有关”的反面。所以我们的核心是判断一个数是否“与7有关”。如果一个数满足以下任意一个条件它就是有关的能被7整除即i % 7 0。个位是7即i % 10 7。十位是7即(i / 10) % 10 7。对于n100的情况十位就是i / 10。只有当这三个条件全部不满足时这个数才是“与7无关”的。很多新手会在这里逻辑混淆错误地用“且”去连接条件。记住判断“有关”用“或”判断“无关”则需要对“有关”的条件取反或者直接用“且”连接三个不满足的条件。1.2 为什么是“平方和”而不是简单求和题目要求的是平方和这增加了两个考察点计算需要在循环体内累加i * i而不是i。数据范围平方和增长很快。例如当n99时最大的无关数可能是96其平方为9216。100个这样的数平方和可能会超过int型变量的表示范围约21亿。因此使用long long类型来存储结果通常是更安全的选择这是一个非常实际的工程细节。1.3 输入范围与循环边界题目一般会给出一个上限n(1 n 100)。我们需要处理的是从1到n包括n的所有整数。循环的写法通常是for(int i 1; i n; i)。这里要注意是i n还是i n必须根据题意明确。对于“小于n”的描述就是i n。2. 从零开始的完整实现步骤与代码我们假设题目输入是一个整数n输出是1到n之间所有与7无关的正整数的平方和。下面我按实际写代码和测试的顺序一步步来。2.1 环境与框架准备你可以在任何支持C/C的环境里写这道题比如本地IDEVisual Studio, Code::Blocks, Dev-C等。在线编译器很多OJ在线判题系统都自带。命令行用g或clang编译。代码结构就是一个简单的控制台程序。我建议先在一个单独的.cpp文件里写方便编译和测试。2.2 第一种写法清晰的条件判断这是最直观的写法直接翻译题目逻辑。#include iostream using namespace std; int main() { int n; cin n; // 读入范围上限n long long sum 0; // 使用long long防止平方和溢出 for (int i 1; i n; i) { // 判断是否与7有关 bool related false; if (i % 7 0) { // 条件1能被7整除 related true; } else if (i % 10 7) { // 条件2个位是7 related true; } else if ((i / 10) % 10 7) { // 条件3十位是7 related true; } // 如果与7无关则累加其平方 if (!related) { sum (long long)i * i; // 注意这里也转为long long计算 } } cout sum endl; return 0; }为什么这么写用一个布尔变量related来标记逻辑清晰。使用else if是因为一旦确定有关就不需要再判断后续条件效率稍高。在累加时将i强制转换为long long再相乘是为了避免两个int相乘可能溢出虽然本题n100不太会但这是好习惯。2.3 第二种写法简化的条件表达式也可以将判断条件写在一个if语句里更紧凑。#include iostream using namespace std; int main() { int n; cin n; long long sum 0; for (int i 1; i n; i) { // 判断是否与7无关同时不满足三个条件 if ( (i % 7 ! 0) (i % 10 ! 7) ((i / 10) % 10 ! 7) ) { sum (long long)i * i; } } cout sum endl; return 0; }这种写法直接判断“无关”条件是用“且”连接的三个“不等于”。我个人更推荐新手先用第一种逻辑更直白熟练后可以用第二种代码更简洁。2.4 验证与测试自己当一回判题机写完代码不要直接提交先自己用几个例子验一下。测试用例设计小范围验证 (n10)与7有关的数7被7整除。与7无关的数1, 2, 3, 4, 5, 6, 8, 9, 10。平方和 1491625366481100 336。运行程序输入10看输出是否为336。包含个位和十位是7的数 (n20)与7有关的数7, 14, 17。可以手动计算或信任程序。用你的程序跑一遍再心算几个关键数验证。边界测试 (n1, n6)n1时输出应为1。n6时输出应为14916253691。稍大的数 (n30)检查27个位是7不是十位2不是7个位是7等等27的个位是7所以27是有关的。这个例子能帮你确认条件判断是否正确。在本地运行输入这些测试用例对比输出。如果都对了你的代码逻辑基本就稳了。3. 深入讨论如果n的范围扩大怎么办原题n100所以我们只检查了十位。这是一个重要的边界限制。如果题目没有明确限制n的范围或者n可以很大比如n10000那么“某一位上是7”这个条件就需要通用化处理。3.1 通用化的数字位检查算法我们不能只写死检查十位和个位。需要一个循环来分解整数的每一位。bool isRelatedToSeven(int num) { // 条件1能被7整除 if (num % 7 0) { return true; } // 条件2任何一位数字等于7 int temp num; while (temp 0) { if (temp % 10 7) { // 检查当前个位 return true; } temp / 10; // 去掉个位 } return false; // 两个条件都不满足则无关 }在主循环中调用这个函数for (int i 1; i n; i) { if (!isRelatedToSeven(i)) { sum (long long)i * i; } }为什么这样写更好可扩展性无论n是几位数算法都适用。清晰性将核心判断逻辑封装成函数主函数更简洁。可维护性如果判断规则变化只需修改这个函数。3.2 思考性能与优化对于n100两种方法性能无差异。但如果n极大例如上亿我们需要考虑提前终止上面的函数一旦发现某位是7就返回避免了不必要的循环。避免重复计算i * i可以计算一次存起来。数学方法本题可能存在更巧妙的数学规律来批量计算“无关数”的平方和但这超出了入门练习的范畴。对于算法题优先保证正确性和清晰性。注意在入门阶段不要过早追求极致的优化。先把逻辑写对、写清楚这是最重要的。4. 常见错误与排查清单很多同学提交代码后遇到“答案错误”、“运行超时”或“格式错误”问题往往出在细节上。下面是我总结的排查顺序4.1 答案错误Wrong Answer这是最常出现的。按以下顺序检查条件逻辑检查if语句的逻辑运算符。是“或”还是“且”判断“有关”还是“无关”最经典的错误就是把判断“无关”的条件(i%7!0 i%10!7 (i/10)%10!7)错写成(i%7!0 || i%10!7 || (i/10)%10!7)。循环边界确认是i n还是i n。仔细读题求和变量初始化sum是否初始化为0了未初始化的变量值随机会导致结果不可预测。整数溢出sum是否用了int当n较大时平方和很可能超过21亿。改成long long。中间计算溢出即使sum是long longi * i也可能是两个int相乘在赋值给sum前就已经溢出了。确保计算时类型足够大如sum (long long)i * i。输入输出格式题目要求输出后换行吗你的cout sum;后面有没有加 endl或\n4.2 运行超时Time Limit Exceeded本题n100几乎不可能超时。如果超时99%是代码陷入了死循环。检查循环变量在for循环里你是否错误地修改了循环变量i通用化算法检查如果你写了通用位检查的while循环确保循环条件(temp 0)正确并且循环体内有temp / 10来改变temp的值。4.3 格式错误Presentation Error通常是因为输出格式与题目要求不完全一致。多输出或少输出是否只输出了一个结果有没有多输出提示语句如“请输入n:”OJ只接受纯结果数据。空格与换行结果是单独一行吗末尾有换行符吗在大多数OJ中末尾有无换行符不影响判题但最好养成输出后换行的习惯 (cout sum endl;)。5. 举一反三同类问题的解决模式“与7无关的数”是一个代表有一类问题都可以用类似的模式解决。掌握这个模式你就能快速解决它们。5.1 问题模式识别这类问题的共性给定一个整数范围按照某种规则筛选出符合条件的数然后对它们进行某种运算求和、平方和、计数、求平均值等。规则可能包括数字特性某位是几、是回文数、是水仙花数、数字之和等。整除特性能被某个数整除、不能被某个数整除。组合条件像本题一样多个条件的组合。5.2 通用解决框架读入数据确定范围n有时可能是区间[a, b]。初始化结果变量根据运算是求和、计数还是其他初始化sum0,count0等。注意数据类型。遍历范围使用for循环遍历每个待检查的数i。条件判断编写一个函数或一段内联代码判断i是否满足条件。这是核心。如果判断逻辑复杂强烈建议封装成独立函数如bool check(int num)。判断时注意提取数字的各位通过%10和/10循环。累积结果如果满足条件就更新结果变量sum i*i,count。输出结果按格式要求输出。5.3 变式练习你可以用这个框架尝试解决以下问题巩固技能求水仙花数一个三位数其各位数字立方和等于该数本身。输出所有水仙花数。求素数之和求给定区间内所有素数的和。数字统计统计1到n中数字k0-9出现了多少次。特殊数的和求1到n中既能被3整除又能被5整除的数的和。解决这些问题时唯一需要变化的就是第4步的“条件判断”函数。遍历和累加的框架是完全一样的。6. 写给新手的最后几点建议我见过很多初学者在这类题目上反复出错不是因为算法难而是因为一些习惯没养成。第一先画流程图或写伪代码再敲键盘。尤其是条件判断部分用纸笔列出几个测试数如7, 14, 17, 27, 71手动走一遍你的判断逻辑。这能避免最致命的逻辑错误。第二重视测试。不要只相信样例输入输出。像第2.4节那样自己设计几个关键的、边界的测试用例。包括最小的n、最大的n、包含各种“有关”情况的n。自己当自己的第一道关卡。第三理解大于记忆。不要只背下这道题的代码。要理解“遍历-判断-累加”这个模式理解如何用%和/来获取数字的每一位。这样下次遇到“与5无关”或者“包含数字3”的题目你就能自己写出来。第四注意数据类型是基本功。int和long long的选择中间计算会不会溢出这些问题在简单题里可能不暴露但在复杂题目里就是致命的。从一开始就养成根据数据范围选择类型的习惯。这道题本身不难但它像一块很好的试金石能检验你对循环、条件、基本运算和整数处理是否真的掌握了。把它吃透这一类“数字筛选计算”题你就有了一个可靠的解题模板。

相关新闻

Turbo C++ 3.0汉化版完整配置与开发环境搭建实战

Turbo C++ 3.0汉化版完整配置与开发环境搭建实战

1. 项目概述:为什么今天还要折腾Turbo C 3.0?如果你是一位从90年代末或21世纪初开始接触编程的老兵,看到“Turbo C 3.0”这个名字,心里肯定会泛起一阵复杂的涟漪。它可能是你编程生涯的起点,那个在蓝底黄字的DOS界面里…

2026/8/6 9:01:18 阅读更多 →
音乐情感分析:技术拆解为何特定歌曲引发告别预感

音乐情感分析:技术拆解为何特定歌曲引发告别预感

最近在整理音乐项目时,发现一个有趣的现象:某些歌曲因其特定的创作背景、旋律走向或歌词意境,会让人产生超越歌曲本身的联想和情感共鸣。比如,有朋友提到,第一次听到某首新歌时,竟产生了“这不会是告别曲吧…

2026/8/6 9:01:18 阅读更多 →
CrewAI项目环境变量配置:告别API密钥硬编码的安全实践

CrewAI项目环境变量配置:告别API密钥硬编码的安全实践

1. 项目概述:为什么CrewAI项目必须告别硬编码风险?如果你正在用CrewAI搭建多智能体系统,或者正准备上手,那你肯定遇到过这个场景:在代码里直接写下了你的API密钥,比如api_key "sk-xxxx-your-secret-k…

2026/8/6 9:01:18 阅读更多 →

最新新闻

基于NPBehave与共享黑板实现Unity群体AI:从行为树到Swarm AI的实战指南

基于NPBehave与共享黑板实现Unity群体AI:从行为树到Swarm AI的实战指南

1. 项目概述:当AI个体学会“抱团”在游戏开发或者模拟仿真领域,我们常常需要处理一群AI角色,比如一群游动的鱼、一队巡逻的士兵,或者是一窝协同攻击的蜜蜂。单个AI的行为逻辑,用行为树(Behavior Tree&#…

2026/8/6 10:05:52 阅读更多 →
HTML入门指南:从零构建网页结构与语义化标签实践

HTML入门指南:从零构建网页结构与语义化标签实践

1. 从“白纸”到“蓝图”:理解HTML的本质如果你刚接触网页开发,可能会被一堆术语吓到:HTML、CSS、JavaScript、框架、库……感觉无从下手。别急,我们得先搞清楚最基础、最核心的那一块:HTML。你可以把它想象成盖房子时…

2026/8/6 10:05:52 阅读更多 →
私域直播系统开发:AI数字人直播、智能互动与大模型应用解析

私域直播系统开发:AI数字人直播、智能互动与大模型应用解析

近两年,AI能力正在逐步融入直播场景。从数字人讲解商品,到智能回复用户问题,再到自动生成直播内容,越来越多企业开始关注AI数字人直播的落地方式。对于开发私域直播系统而言,AI并不是简单增加一个聊天机器人&#xff0…

2026/8/6 10:05:52 阅读更多 →
施密特触发器RC振荡器:原理、设计与实践指南

施密特触发器RC振荡器:原理、设计与实践指南

1. 从“比较”到“振荡”:施密特触发器振荡器的核心思路 施密特触发器,这个在数字电路里再常见不过的元件,通常被我们用来“整形”——把缓慢变化、带有毛刺的模拟信号,变成干净利落的数字方波。但你可能没想过,仅仅把…

2026/8/6 10:05:52 阅读更多 →
保界数值方法:确保物理合理性的计算数学关键技术

保界数值方法:确保物理合理性的计算数学关键技术

1. 项目概述:保界数值方法的新突破意味着什么? 最近看到南科大吴开亮老师与合作者在保界数值方法研究上取得新进展的消息,作为一个长期关注计算数学和科学计算领域动态的从业者,我立刻来了精神。这可不是一个普通的学术进展通告&a…

2026/8/6 10:05:52 阅读更多 →
Stable Diffusion背景融合失效?这不是bug,是扩散步长与U-Net跨层特征对齐失配(附TensorRT加速版一致性增强插件)

Stable Diffusion背景融合失效?这不是bug,是扩散步长与U-Net跨层特征对齐失配(附TensorRT加速版一致性增强插件)

更多请点击: https://kaifayun.com 第一章:Stable Diffusion背景一致性问题的本质重定义 传统上,背景一致性常被简化为“图像各区域语义连贯”或“风格统一”的表层观察。然而在 Stable Diffusion 的扩散建模框架下,该问题本质是…

2026/8/6 10:04:51 阅读更多 →

日新闻

深入解析LimboAI C++内核:架构设计与性能优化实战

深入解析LimboAI C++内核:架构设计与性能优化实战

1. 项目概述:为什么我们需要深入LimboAI的C内核?如果你是一名使用Godot引擎的游戏开发者,尤其是对AI行为逻辑有较高要求的项目,那么LimboAI这个名字你大概率不会陌生。它作为Godot 4生态中一个备受瞩目的行为树与状态机插件&#…

2026/8/6 0:00:06 阅读更多 →
Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

1. 项目概述与核心思路大家好,我是老张,一个在游戏开发一线摸爬滚打了十多年的老码农。今天咱们接着聊《空洞骑士》风格2D动作游戏的Demo制作。上一期我们搭好了基础框架,处理了角色移动和碰撞,这一期,我们要让游戏世界…

2026/8/6 0:00:06 阅读更多 →
被动防火门市场前景发展趋势

被动防火门市场前景发展趋势

被动防火门依靠材质结构、密闭构造阻隔烟火蔓延,无需电控启动,是建筑被动消防系统核心构件,行业依托新规管控、城市更新、工业安全升级迎来稳定扩容,整体朝着合规化、专项化、低碳化、智能化方向发展。现阶段 GB12955‑2024 新版国…

2026/8/6 0:00:06 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/5 15:00:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/5 13:13:56 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/5 10:20:36 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/5 21:00:14 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →