黑马程序员技术交流社区

标题: 求助!这个问题好难!!希望高手帮忙 [打印本页]

作者: 聂益飞    时间: 2012-5-16 21:26
标题: 求助!这个问题好难!!希望高手帮忙
问题是这样的:输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如153是一水仙花数153=1的方+5的立方+3的立方。

我想用最简单的循环语句完成,可是怎么嵌套都不对!麻烦高手看看
作者: 程旦    时间: 2012-5-16 21:31
伪代码思路:先用 a b c分别赋值上这个数的  百位 十位 个位    然后在100到1000中循环  在用if判断一下就行    很简单的
作者: 聂益飞    时间: 2012-5-16 21:32
程旦 发表于 2012-5-16 21:31
伪代码思路:先用 a b c分别赋值上这个数的  百位 十位 个位    然后在100到1000中循环  在用if判断一下就 ...

就是伪代码思路!!问题是代码怎么写呀!我写来写去都不对!!
作者: 任睦强    时间: 2012-5-16 21:33
public static void main(String[] args)
{
  for(int i=100;i<=999;i++)
  {
   int geWei,shiWei,baiWei;
   baiWei=i/100;
   shiWei=(i-baiWei*100)/10;
   geWei=i-baiWei*100-shiWei*10;
   if(i==geWei*geWei*geWei+shiWei*shiWei*shiWei+baiWei*baiWei*baiWei)
   {
    System.out.println(i);
   }
  }

}

利用for循环控制100-999个数,每个数分解出个位,十位,百位。例如:153是一水仙花数153=1的方+5的立方+3的立方
作者: 聂益飞    时间: 2012-5-16 21:38
任睦强 发表于 2012-5-16 21:33
public static void main(String[] args)
{
  for(int i=100;i

哥~~谢了!!一直以来都是我思路想歪了!前面和你一样 三个数 分别代表十位百位千位!但是后面想叉了!
作者: 申振华    时间: 2012-5-16 21:40
本帖最后由 申振华 于 2012-5-16 21:44 编辑
  1. public class Test {
  2.         public static void main(String[] args) {
  3.                         int a,b,c;
  4.                         for (int j = 100; j <1000; j++) {                                
  5.                                         a=j/100;  //百位数
  6.                                         b=j/10%10;  //十位数
  7.                                         c=j%100%10;  //个位
  8.                                 if(a*a*a+b*b*b+c*c*c==a*100+b*10+c){
  9.                                         System.out.println("水仙花数:"+(a*100+b*10+c));
  10.                                 }                                
  11.                         }
  12.         }
  13. }
复制代码

作者: 刘克方    时间: 2012-5-16 21:45
public class FlowerNum {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
               
         for(int i=100;i<999;i++){
                 String str=i+"";
                  int x=Integer.parseInt(str.charAt(0)+"");
                  int y=Integer.parseInt(str.charAt(1)+"");
                  int z=Integer.parseInt(str.charAt(2)+"");
                  int count=x*x*x+y*y*y+z*z*z;
                  if(i==count){
                          System.out.println(i);
                  }
         }
        }

}
输出结果为:
153
370
371
407

作者: 麦田守望者0812    时间: 2012-5-16 21:48
public int daffodilsNum(int num){
         int a = 0;
         int b = 0;
         int c = 0;
a = num/100;
b = (num-a*100)/10;
c = num%10;
if(num == a*a*a+b*b*b+c*c*c){
        return num;
   }else
   {return 0;}
}


public static void main(String args[]){

     for(int i = 100;i<10000;i++){
        int b = daffodilsNum(i);
        if(b){
          System.out.println("水仙花数:"+i);
       }
    }
}
作者: 于陈    时间: 2012-5-16 21:49
这个题目大一的时候学c++的时候还做过练习的
首先要解决的一个问题:就是取出这个三位数的每一位数字
这个解决了就一个for循环就搞定!
假设这个三位数是536
536除以100就得到百位数字 a=5
536对10求余,就得到c=6
最后拿(536-a*100-c)/10就得到b=3
  1. /**
  2. * 作者:于陈
  3. * 功能:求水仙花数
  4. * 时间:2012年5月16日 21:46:25
  5. */


  6. public class Shuzu

  7. {
  8.         public static void main(String[] args) {
  9.                 // for循环,从100到999之间的数都是三位数
  10.                 for (int i = 100; i <= 999; i++) {
  11.                         int a = 0, b = 0, c = 0; // 定义并初始化这个三位数的各位数
  12.                         a = i / 100;
  13.                         c = i % 10;
  14.                         b = (i - a * 100 - c) / 10;
  15.                         // 判断如果符合各位数的立方和等于这个数,那么就输出这个数
  16.                         if (a * a * a + b * b * b + c * c * c == i) {
  17.                                 System.out.println(i);
  18.                         }

  19.                 }
  20.         }
  21. }
复制代码

作者: 聂益飞    时间: 2012-5-16 21:50
数学学差了就是不行!谢谢各位!!好久没动脑子脑子都生锈了!
作者: 聂益飞    时间: 2012-5-16 21:52
于陈 发表于 2012-5-16 21:49
这个题目大一的时候学c++的时候还做过练习的
首先要解决的一个问题:就是取出这个三位数的每一位数字
这个 ...

我就是翻出大一的C书背后的练习来做的!以前做过!几年过去!全还老师了!
作者: 聂益飞    时间: 2012-5-16 21:53
刘克方 发表于 2012-5-16 21:45
public class FlowerNum {

        /**

哥~~String类我都忘光了......
作者: 于陈    时间: 2012-5-16 21:54
niexiaolu 发表于 2012-5-16 21:52
我就是翻出大一的C书背后的练习来做的!以前做过!几年过去!全还老师了! ...

哈哈~我前几天还去学校的在线程序设计广场刷题目来着~把以前用c++写的再用java写一遍~
作者: 许涛    时间: 2012-5-16 21:56
本帖最后由 许涛 于 2012-5-16 22:09 编辑

循环嵌套~
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 for(int x=0;x<10;x++)
  6.                 {
  7.                         for(int y=0;y<10;y++)
  8.                         {
  9.                                 for(int z=0;z<10;z++)
  10.                                 {
  11.                                         if((z+10*y+x*100==x*x*x+y*y*y+z*z*z)&&(z+10*y+x*100>100))
  12.                                                 System.out.println("x="+x+",y="+y+",z="+z);
  13.                                 }
  14.                         }
  15.                 }
  16.         }
  17. }
复制代码

作者: 聂益飞    时间: 2012-5-16 21:58
许涛 发表于 2012-5-16 21:56
循环嵌套~

高手!这道题都出了3种做法了!!
作者: 聂益飞    时间: 2012-5-16 22:00
许涛 发表于 2012-5-16 21:56
循环嵌套~

不过你这种做法结果输出是错的!!
作者: 聂益飞    时间: 2012-5-16 22:01
niexiaolu 发表于 2012-5-16 22:00
不过你这种做法结果输出是错的!!

不好意思!是我没注意看!结果没错!!正确的!!谢谢!!!
作者: 于陈    时间: 2012-5-16 22:03
许涛 发表于 2012-5-16 21:56
循环嵌套~

楼上的输出有点问题啊~
输出的是:
x=0,y=0,z=0
x=0,y=0,z=1
x=1,y=5,z=3
x=3,y=7,z=0
x=3,y=7,z=1
x=4,y=0,z=7
这个很明显还有点小问题
  1. public class Shuzu

  2. {
  3.         public static void main(String[] args) {
  4.                 for (int x = 0; x < 10; x++) {
  5.                         for (int y = 0; y < 10; y++) {
  6.                                 for (int z = 0; z < 10; z++) {
  7.                                         if ((z + 10 * y + x * 100 == x * x * x + y * y * y + z * z
  8.                                                         * z)
  9.                                                         && (x != 0))
  10.                                                 System.out.println(x + "" + y + "" + z);
  11.                                 }
  12.                         }
  13.                 }
  14.         }
  15. }
复制代码
这样输出就木有问题了~
作者: 许涛    时间: 2012-5-16 22:06
已修正。。。
作者: 刘克方    时间: 2012-5-16 22:07
niexiaolu 发表于 2012-5-16 21:53
哥~~String类我都忘光了......

String类的方法很多,很灵活,用起来方便
作者: 聂益飞    时间: 2012-5-16 22:19
于陈 发表于 2012-5-16 22:03
楼上的输出有点问题啊~
输出的是:
x=0,y=0,z=0

还是你的想法和我一开始的想法最接近
作者: 胡团乐    时间: 2012-5-16 22:22
其实这个题的目的是取出个十百位的数字就可以了 不难的 嘿嘿
/*输出水仙花数字abc=a*a*a+b*b*b+c*c*c
*
* */
public class WaterFlower {

        public static void main(String[] args) {
               
                int count=0;                                 //水仙花个数统计
                System.out.println("100-1000之间的水仙花:");
                for(int i=100;i<1000;i++){
                       
                        int g=(i%100)%10;                //g代表个位数
                       
                        int s=(i%100-g)/10;     //s代表十位数
                       
                        int b=(i-s*10-g)/100;   //b代表百位数
                       
                       
                        if(i==(g*g*g+s*s*s+b*b*b)){
                               
                                count++;
                               
                                System.out.println("水仙花"+count+"-->"+i);
                        }
                }
        }
}
结果:
100-1000之间的水仙花:
水仙花1-->153
水仙花2-->370
水仙花3-->371
水仙花4-->407
作者: 王亚男    时间: 2012-5-17 01:28
本帖最后由 王亚男 于 2012-5-17 01:39 编辑
于陈 发表于 2012-5-16 22:03
楼上的输出有点问题啊~
输出的是:
x=0,y=0,z=0

哈哈~,百位从1开始取不就行了~还少了一步判断,提高了效率~~
作者: 刘蕴学    时间: 2012-5-17 05:29
本帖最后由 了无尘 于 2012-5-17 05:40 编辑

很多年前就做过这个了
这破缩进搞不定了,就这么地吧。。。。。我崩溃了,我投降
                //显示n位的水仙花数,4就是显示4位数的水仙花数
                //n>=3 小于3位的数不是水仙花数
                int n = 5;
                for (int i = (int)Math.pow(10, n-1); i < Math.pow(10, n); i++)
               {
                           int[] bits = new int[n];
                           int tmp = i;
                           int sum = 0;
                           for (int j = bits.length - 1; j > ~0; j--, tmp/=10)
                        {
                    
                               sum += Math.pow((bits[j] = tmp % 10), n);
                        }
                            if(i == sum)
                           {
                                   System.out.println(i);
                           }
                    }

作者: 陌花╮有意、    时间: 2012-5-18 15:06
//这样应该能行
package com.study;

public class TestFlower {
        public static void main(String[] args) {
                int temp = 0,i1,i2,i3;
                for(int i=100;i<=999;i++) {
                        i1=i%10;
                        i2=(i%100)/10;
                        i3=i/100;
                        temp=(int) (Math.pow(i1,3)+Math.pow(i2,3)+Math.pow(i3,3));
                        if(i==temp){
                                System.out.println(temp);
                        }
                }
        }

}

作者: 李哲    时间: 2012-5-18 16:59
  1. public class Flowers {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 // TODO Auto-generated method stub
  7.                 for(int x=100;x<1000;x++){
  8.                         if((x%10)*(x%10)*(x%10)+(x%100/10)*(x%100/10)*(x%100/10)+(x%1000/100)*(x%1000/100)*(x%1000/100)==x)
  9.                                 System.out.println(x);
  10.                 }
  11.                
  12.                 int t=1;               
  13.                 while(true){
  14.                        
  15.                         int sum=0;
  16.                         for(int q=t;q!=0;q=q/10){               
  17.                                 sum+=(q%10)*(q%10)*(q%10);
  18.                         }
  19.                         if(sum==t)
  20.                                 System.out.println(sum);                               
  21.                         t++;
  22.                                        
  23.                 }                                       
  24.                                        
  25.         }

  26. }
复制代码

作者: 黄秋    时间: 2012-5-18 20:49
看到大家这么踊跃,我也来凑凑热闹:
  1. class Test {
  2.         public static void main(String[] args) {
  3.                 for(int i=100;i<1000;i++){
  4.                         int sum=0;
  5.                         for(int j=0;j<3;j++){
  6.                                 int temp=Integer.parseInt((i+"").charAt(j)+"");
  7.                                 sum+=Math.pow(temp, 3);
  8.                         }
  9.                         if(i==sum)        System.out.println(i);
  10.                 }
  11.         }
  12. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2