二级
C++ 算法考级专栏
真题分析、矩阵探测、递归回溯与基础语法
🎨 视觉封面【GESP】C++二级练习 luogu-b2081, 与 7 无关的数
📅 2024-12-16·✍️ OneCoder·计算中...·⏱️ 5 分钟
#GESP#C++#多重循环
GESP二级练习,涉及多层条件和循环嵌套,难度★✮☆☆☆。
luogu-b2081
题目要求
题目描述
一个正整数,如果它能被 整除,或者它的十进制表示法中某一位上的数字为 ,则称其为与 相关的数。现求所有小于等于 与 无关的正整数的平方和。
输入格式
输入为一行,正整数 。
输出格式
输出一行,包含一个整数,即小于等于 的所有与 无关的正整数的平方和。
样例输入 #1
BASH
21
样例输出 #1
BASH
2336
题目分析
这是一个简单的数学问题,需要我们找出所有小于等于 的与 无关的正整数,并计算它们的平方和。我们可以使用一个循环来遍历所有小于等于 的数,然后判断每个数是否与 无关。如果与 无关,我们就将它的平方加到答案中。最后,我们输出答案即可。
本题解答过程中,孩子利用了输入数据的数据范围限制,“简化”写死了判断与 无关的数的方法,即只判断一位数、两位数的情况。
示例代码
方法一
利用了输入数据的数据范围限制,直接法
CPP
#include <iostream>
using namespace std; // 使用标准命名空间
int main() {
int n; // 定义变量n
cin >> n; // 从输入流中读取n的值
int ans = 0; // 初始化答案变量
for (int i = 1; i <= n; i++) { // 从1到n遍历所有数
if (i % 7 != 0 && i % 10 != 7 && i / 10 % 10 != 7) { // 判断i是否与7无关
ans += i * i; // 如果与7无关,则将i的平方加到答案中
}
}
cout << ans; // 输出答案
return 0;
}
方法二
利用之前b2082练习类似逻辑,拓展到任意情况通用方法
CPP
#include <iostream>
using namespace std;
int main() {
int n; // 定义变量n
cin >> n; // 从输入流中读取n的值
int ans = 0; // 初始化答案变量
for (int i = 1; i <= n; i++) { // 从1到n遍历所有数
int d = i, num; // 初始化变量d为i,num用于存储每一位数字
bool flag = false; // 初始化标志变量,用于判断i是否与7无关
if (i % 7 == 0) { // 如果i能被7整除,则i与7有关
flag = true;
continue; // 跳过当前循环,继续下一个数
}
while (d != 0) { // 循环直到d变为0
num = d % 10; // 获取d的最后一位数字
if (num == 7) { // 如果最后一位数字是7,则i与7有关
flag = true;
break; // 跳出循环
}
d /= 10; // 移除d的最后一位数字
}
if (!flag) { // 如果i与7无关
ans += i * i; // 将i的平方加到答案中
}
}
cout << ans; // 输出答案
return 0;
}
💡 OneCoder 资源指引
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
🤝 技术交流与答疑
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
📚
猜你想读 · 相关文章推荐
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com
💬 读者留言与交流
还没有留言,快来成为第一个讨论者吧!