一、题目链接
http://noi.openjudge.cn/ch0105/39/
二、解题思路
◎ 根据题意可分解出两个子问题:
▲ 判断与7相关的数;
▲ 求解给定区间内与7无关的正整数的平方和;
◎ 判断与7相关的数:
▲ 能被7整除的数是与7相关的数;
▲ 各数位中包含数字7的数是与7相关的数;
◎ 求解给定区间内与7无关的正整数的平方和:
▲ 循环判断区间内的每个数,将其中与7无关的数的平方累加到和上。
三、实施步骤
◆ 设计方法public boolean isSevenRelated(int n)处理【判断与7相关的数】业务逻辑:
*** 形式参数int n代表待判断的整数;
*** 方法isSevenRelated返回true当且仅当n是与7相关的数,否则false。
◇ 方法isSevenRelated实施步骤如下:
◎ if n%7==0:返回true;
◎ 在n!=0时,循环处理如下:
▲ if n%10==7:返回true;
▲ 令n=n/10;
◎ 返回false。
-----------------------------------------------------------------------------------------------------------------
◆ 设计方法public int squareSumOfNonSevenRelated(int n)处理【求解给定区间内与7无关的正整数的平方和】业务逻辑:
*** 形式参数int n代表给定区间的上界;
*** 方法squareSumOfNonSevenRelated返回[1,n]区间内与7无关的正整数的平方和。
◇ 方法squareSumOfNonSevenRelated实施步骤如下:
◎ 定义int类型的整数ans=0,代表[1,n]区间内与7无关的正整数的平方和;
◎ 通过标记i代表[1,n]区间内的每一个整数,i从1开始,到n为止,递增步长为1,循环处理如下:
▲ if !isSevenRelated(i):令ans=ans+i*i;
◎ 返回ans。
-----------------------------------------------------------------------------------------------------------------
◆ 在main方法中输入区间上界n,将其作为实际参数注入方法squareSumOfNonSevenRelated,输出计算结果。
四、Java程序
import java.util.Scanner;
public class Main {
public boolean isSevenRelated(int n) {
if (n % 7 == 0) {
return true;
}
while (n != 0) {
if (n % 10 == 7) {
return true;
}
n = n / 10;
}
return false;
}
public int squareSumOfNonSevenRelated(int n) {
int ans = 0;
for (int i = 1; i <= n; i++) {
if (!isSevenRelated(i)) {
ans = ans + i * i;
}
}
return ans;
}
public static void main(String[] args) {
Main test = new Main();
Scanner input = new Scanner(System.in);
int n = input.nextInt();
System.out.print(test.squareSumOfNonSevenRelated(n));
}
}