猜年龄(蓝桥杯)
发布时间
阅读量:
阅读量
题目
美国数学家诺伯特·维纳(N.Wiener)天分过人,在少年时期便已展现出非凡的学术天赋,他十一岁便入读大学。他在1935年至1936年间访问并讲授于中国清华大学
某天下午三点左右的一次会议中
请你推算一下,他当时到底有多年轻。
提示:
先用/10和%10把各个位上的数取出来,然后判断是否相等
代码实现
public class WienerAgePuzzle {
public static void main(String[] args) {
int age;
for (age = 10; age < 100; age++) { // 遍历可能的年龄范围
if (isSolution(age)) {
System.out.println("维纳当时的年龄是: " + age);
break; // 找到答案后退出循环
}
}
}
private static boolean isSolution(int age) {
// 将年龄的立方和四次方转换为字符串
String cubeStr = String.valueOf(age * age * age);
String quadStr = String.valueOf(age * age * age * age);
// 检查立方和四次方的位数
if (cubeStr.length() != 4 || quadStr.length() != 6) {
return false;
}
// 合并立方和四次方的字符串,并转换为字符数组以便检查
String combinedStr = cubeStr + quadStr;
char[] digits = combinedStr.toCharArray();
// 检查是否包含0到9的每个数字,且每个数字只出现一次
boolean[] seen = new boolean[10];
for (char digit : digits) {
int num = Character.getNumericValue(digit);
if (num < 0 || num > 9 || seen[num]) {
return false;
}
seen[num] = true;
}
// 如果所有条件都满足,返回true
return true;
}
}
java

答案:
18
分析
首先定义了一个名为isSolution的方法,它接收一个整数值作为参数,并验证该年龄是否符合要求.在主程序中,我们遍历所有可能的年纪值(假设维纳不会超过两位),并对每一个年纪调用isSolution函数进行检查.一旦找到符合条件的年纪就会输出结果并结束程序流程.
该算法首先将输入年龄计算其立方与四次方结果,并将其分别转换为字符串形式;接着验证其长度是否符合预期(立方结果应为四位数、四次方结果应为六位数)。随后将这两个字符串合并成一个完整的字符序列,并将其拆解为单独的字符数组;接下来该算法会遍历这个字符数组,并使用一个名为seen的布尔数组来记录哪些数字已经出现过;具体来说,在遍历过程中若发现任何一个数字超出0至9范围或已有重复记录,则返回值为假;否则则返回真。
全部评论 (0)
还没有任何评论哟~
