A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 孙百鑫 于 2013-6-30 08:16 编辑


美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。
    一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:
    “我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”
    请你推算一下,他当时到底有多年轻。这是一个赛试题想了很久

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 很给力!

查看全部评分

15 个回复

倒序浏览
能大概推出18~21 岁
回复 使用道具 举报
L.I.F.E 发表于 2013-6-26 09:15
能大概推出18~21 岁

根据不重复,那就是18 或19了
回复 使用道具 举报
  1. /*
  2. * 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。
  3.     一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:
  4.     “我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”    请你推算一下,他当时到底有多年轻。
  5. */
复制代码
运行结果:
  1. 5832.0104976.0
  2. 6859.0130321.0
  3. 8000.0160000.0
  4. 9261.0194481.0
复制代码
如果想让程序自己查找,下面再说~
回复 使用道具 举报
代码不见了。。。
  1. import java.math.*;
  2. public class Age {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 // TODO Auto-generated method stub
  8.                 String rel;
  9.             for(int i=18;i<=21;i++){
  10.                 rel= String.valueOf(Math.pow(i,3))+String.valueOf(Math.pow(i, 4));
  11.                 System.out.println(rel);
  12.                 }

  13.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报 1 0
/*最小的四位数是1000,开三次方是10;最大的四位数是9999,开三次方是21.54....
由此可知,此人年龄在10-21之间;
最小的六位数100000,开四次方是17.78....;最大的六位数是999999,开四次方是31.62...;
综上,此人年龄在18-21之间;
*/

为什么不能编辑回帖啊。。。
回复 使用道具 举报
秩宇 中级黑马 2013-6-26 10:44:12
7#
  1. import java.math.*;

  2. public class Age {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 // TODO Auto-generated method stub
  8.                 String rel;
  9.                 for (int i = 18; i <= 21; i++) {
  10.                         rel = String.valueOf((int) Math.pow(i, 3))
  11.                                         + String.valueOf((int) (Math.pow(i, 4)));                //把两个数组合成字符串
  12.                         int is = 0;
  13.                         int sum = 0;
  14.                         for (int j = 48; j <= 57; j++) {                                                //循环查找字符串中是否包含0-9,找到一个后sum+1
  15.                                 is = rel.indexOf(j);
  16.                                 if (is == -1)
  17.                                         break;
  18.                                 sum = sum + 1;

  19.                         }
  20.                         if (sum == 10) {                                                                                //如果找到10次,输出结果
  21.                                 System.out.println("此人年龄是:" + i);
  22.                                 break;
  23.                         }

  24.                 }
  25.         }

  26. }
复制代码
完成
回复 使用道具 举报
18岁              
回复 使用道具 举报

public class ageDemo {
        public static void main(String[] args) {
                for(int i=1;i<50;i++)//年龄设置1--50岁
                {
                        String s=(i*i*i)+""+(i*i*i*i)+"";//年龄立方加四次方变成数组
                        //年龄字符串包含0--9全部则打印
                        if(s.contains("0")&&s.contains("1")&&s.contains("2")&&s.contains("3")&&s.contains("4")&&s.contains("5")&&s.contains("6")&&s.contains("7")&&s.contains("8")&&s.contains("9")&&s.contains("0"))
                                System.out.println(s);       
                }
        }
}
求技术分啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

回复 使用道具 举报
刚才停电了,现在贴上我的代码:
  1. class  GuessAge
  2. {
  3.         //根据他的话可以判断出:
  4.         //年龄的三次方是4位数,且不重复,所以是>1000和<=9876
  5.         //所以从10开始判断。
  6.         public static void main(String[] args)
  7.         {
  8.                 int a = 10;
  9.                 while(a*a*a <= 9876)
  10.                 {
  11.                         if( a*a*a*a>100001 )
  12.                         {
  13.                                 System.out.println(a);
  14.                                 guess(a);
  15.                                 a = a + 1;
  16.                         }
  17.                         else
  18.                         {
  19.                                 a = a + 1;
  20.                         }
  21.                 }

  22.         }

  23.         public static  void guess(int age)
  24.         {
  25.                 int number1 = age*age*age*age;
  26.                 int number2 = age*age*age;
  27.                 get(number1,number2);
  28.                
  29.         }
  30.         public static void get(int number1,int number2)
  31.         {
  32.                 int temp ;
  33.                 int[] arr = new int[10];
  34.                 //将它年龄的三次方和四次方中的元素封装进数组
  35.                 //这里采用取余数的方法
  36.                 for ( int i = 0; i < 6 ; i++ )
  37.                 {
  38.                         temp = number1%10;
  39.                         arr[i] = temp;                       
  40.                         number1 = (number1 - temp)/10;
  41.                 }
  42.                 for (int i = 6; i < 10; i++ )
  43.                 {
  44.                         temp = number2%10;
  45.                         arr[i] = temp;
  46.                         number2 = (number2 - temp)/10;
  47.                 }
  48.                
  49.                 //判断数组中的元素是否重复。
  50.                 for ( int x = 0 ; x < 10  ; x++ )
  51.                 {
  52.                         temp = arr[x];
  53.                         for ( int y = 0 ; y != x && y < 10; y++ )
  54.                         {
  55.                                 if(arr[y] == temp)
  56.                                 {
  57.                                         System.out.println("不是他的年龄");
  58.                                         return;
  59.                                 }

  60.                         }
  61.                        
  62.                 }
  63.                 System.out.println("是他的年龄");

  64.         }
  65. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

回复 使用道具 举报

public class ageDemo {
        public static void main(String[] args) {
                for(int i=1;i<50;i++)//年龄设置1--50岁
                {
                        String s=(i*i*i)+""+(i*i*i*i)+"";//年龄立方加四次方变成数组
                        //年龄字符串包含0--9全部则打印
                        if(s.contains("0")&&s.contains("1")&&s.contains("2")&&s.contains("3")&&s.contains("4")&&s.contains("5")&&s.contains("6")&&s.contains("7")&&s.contains("8")&&s.contains("9")&&s.contains("0"))
                                System.out.println(i);       
                }
        }
}
上个打印的是字符串     失误         这个打印的是年龄         
回复 使用道具 举报
秩宇 发表于 2013-6-26 09:41
代码不见了。。。

谢谢你让我学到了Math类中的pow(double a,double b)这个方法。用这个方法算出是18岁。
回复 使用道具 举报
。。呵呵。。数学问题都坑爹,,
回复 使用道具 举报
郭伟杰 发表于 2013-6-26 11:04
public class ageDemo {
        public static void main(String[] args) {
                for(int i=1;i

谢谢你的回答,在你的回答中我有有了提升,谢谢
回复 使用道具 举报
王广亚 发表于 2013-6-26 12:15
谢谢你让我学到了Math类中的pow(double a,double b)这个方法。用这个方法算出是18岁。 ...

这个。。。 算是基础吧。。。
回复 使用道具 举报
楼主您好,帖子长时间没有动态我已经将您的帖子改成已解决。如有问题请私密我哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马