Advertisement

猜年龄(蓝桥杯)

阅读量:

题目

美国数学家诺伯特·维纳(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
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-18/4nHEIAZq39eL1w8KdavgWGotRQF0.png)

答案:

18

分析

首先定义了一个名为isSolution的方法,它接收一个整数值作为参数,并验证该年龄是否符合要求.在主程序中,我们遍历所有可能的年纪值(假设维纳不会超过两位),并对每一个年纪调用isSolution函数进行检查.一旦找到符合条件的年纪就会输出结果并结束程序流程.

该算法首先将输入年龄计算其立方与四次方结果,并将其分别转换为字符串形式;接着验证其长度是否符合预期(立方结果应为四位数、四次方结果应为六位数)。随后将这两个字符串合并成一个完整的字符序列,并将其拆解为单独的字符数组;接下来该算法会遍历这个字符数组,并使用一个名为seen的布尔数组来记录哪些数字已经出现过;具体来说,在遍历过程中若发现任何一个数字超出0至9范围或已有重复记录,则返回值为假;否则则返回真。

全部评论 (0)

还没有任何评论哟~