与 7 无关的数
GESP二级练习,涉及多层条件和循环嵌套,难度★✮☆☆☆。
luogu-b2081
题目要求
题目描述
一个正整数,如果它能被 整除,或者它的十进制表示法中某一位上的数字为 ,则称其为与 相关的数。现求所有小于等于 与 无关的正整数的平方和。
输入格式
输入为一行,正整数 。
输出格式
输出一行,包含一个整数,即小于等于 的所有与 无关的正整数的平方和。
样例输入 #1
21
样例输出 #1
2336
题目分析
这是一个简单的数学问题,需要我们找出所有小于等于 的与 无关的正整数,并计算它们的平方和。我们可以使用一个循环来遍历所有小于等于 的数,然后判断每个数是否与 无关。如果与 无关,我们就将它的平方加到答案中。最后,我们输出答案即可。
本题解答过程中,孩子利用了输入数据的数据范围限制,“简化”写死了判断与 无关的数的方法,即只判断一位数、两位数的情况。
{% include custom/custom-post-content-inner.html %}
示例代码
方法一
利用了输入数据的数据范围限制,直接法
#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练习类似逻辑,拓展到任意情况通用方法
#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;
}
{% include custom/custom-post-content-footer.md %}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
“luogu-”系列题目可在 洛谷题库 在线评测。
“bcqm-”系列题目可在 编程启蒙题库 在线评测。
GESP/CSP 认证学习微信公众号

Last updated on