一、题目链接
http://noi.openjudge.cn/ch0105/39/
二、解题思路
◎ 根据题意分解出两个子问题:判断与7相关的数、求解给定区间内与7无关的正整数的平方和;
◎ 判断与7相关的数:能被7整除的数是与7相关的数,各数位中包含数字7的数是与7相关的数;
◎ 求解给定区间内与7无关的正整数的平方和:循环判断区间内的每个数,将其中与7无关的数的平方累加到和上。
三、实施步骤
◆ 函数bool isSevenRelated(int n)处理与7相关的数判断业务逻辑:
→ 参数n为int类型的整数,代表给定整数;
→ 函数isSevenRelated返回true当且仅当n是与7相关的数,否则false。
◇ 函数isSevenRelated实施步骤如下:
◎ 首先,如果n%7==0:返回true;
◎ 其次,在n!=0时,循环处理如下:
→ 如果n%10==7:返回true;
→ 令n=n/10;
◎ 最后,返回false。
◆ 函数int squareSumOfNonSevenRelated(int n)处理给定区间内与7无关的正整数的平方和求解业务逻辑:
→ 参数n为int类型的整数,代表给定区间的上界;
→ 函数squareSumOfNonSevenRelated返回给定区间内与7无关的正整数的平方和,区间下界为1。
◇ 函数squareSumOfNonSevenRelated实施步骤如下:
◎ 首先,定义int类型的整数ans,代表[1,n]区间内与7无关的正整数的平方和,初始时ans为0;
◎ 其次,通过标记i代表[1,n]区间内的每一个整数,更新步长为1,循环处理如下:
→ 如果!isSevenRelated(i):令ans=ans+i*i;
◎ 最后,返回ans。
◇ 在主函数main中输入区间上界n,将其作为参数注入函数squareSumOfNonSevenRelated,输出计算结果。
四、C++程序
#include <iostream>
using namespace std;
bool isSevenRelated(int n)
{
if (n % 7 == 0)
{
return true;
}
while (n != 0)
{
if (n % 10 == 7)
{
return true;
}
n = n / 10;
}
return false;
}
int squareSumOfNonSevenRelated(int n)
{
int ans = 0;
for (int i = 1; i <= n; i++)
{
if (!isSevenRelated(i))
{
ans = ans + i * i;
}
}
return ans;
}
int main()
{
int n;
cin >> n;
cout << squareSumOfNonSevenRelated(n);
return 0;
}