问题描述:
小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。
你能猜出这个数字是多少吗?
思路分析:
对于这个数字的平方和立方,当把它们的数字拼起来(不是分别包含),恰好能组成 0 到 9 这 10 个数字,每个数字都出现且只出现一次。
通过循环逐个尝试数字number,计算number的平方和立方,然后提取各个位数字并存储在HashSet中,最后判断HashSet中是否包含了0到9这10个数字且每个数字只出现一次。
如果找到满足条件的数字number,则输出该数字并结束循环。
代码实现:
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
// 初始化一个变量number为0,用于逐个尝试数字,直到找到满足条件的数字
int number = 0;
while (true) {
// 计算当前数字的平方和立方
int square = (int) Math.pow(number, 2);
int cube = (int) Math.pow(number, 3);
if (isUniqueDigits(square, cube)) {
// 如果找到满足条件的数字,输出该数字并终止循环
System.out.println("小明发现的奇妙数字是: " + number);
break;
}
// 尝试下一个数字
number++;
}
}
// 检查平方和立方中的数字是否包含10个不同的数字
private static boolean isUniqueDigits(int square, int cube) {
// 使用HashSet存储数字的各个位,保证不重复
Set<Integer> digits = new HashSet<>();
// 提取平方中的各个位数字
while (square > 0) {
digits.add(square % 10);
square /= 10;
}
// 提取立方中的各个位数字
while (cube > 0) {
digits.add(cube % 10);
cube /= 10;
}
// 判断HashSet中的数字个数是否为10,即是否包含10个不同的数字
return digits.size() == 10;
}
}