问题描述:
小明发现了一个奇妙的数字。它的平方和立方正好把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;}
}