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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 聂益飞 高级黑马   /  2012-5-16 21:26  /  3389 人查看  /  26 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

问题是这样的:输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如153是一水仙花数153=1的方+5的立方+3的立方。

我想用最简单的循环语句完成,可是怎么嵌套都不对!麻烦高手看看

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

26 个回复

正序浏览
黄秋 黑马帝 2012-5-18 20:49:00
27#
看到大家这么踊跃,我也来凑凑热闹:
  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. }
复制代码
回复 使用道具 举报
  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. }
复制代码
回复 使用道具 举报
//这样应该能行
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-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-17 01:39 编辑
于陈 发表于 2012-5-16 22:03
楼上的输出有点问题啊~
输出的是:
x=0,y=0,z=0

哈哈~,百位从1开始取不就行了~还少了一步判断,提高了效率~~
回复 使用道具 举报
其实这个题的目的是取出个十百位的数字就可以了 不难的 嘿嘿
/*输出水仙花数字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-16 22:03
楼上的输出有点问题啊~
输出的是:
x=0,y=0,z=0

还是你的想法和我一开始的想法最接近
回复 使用道具 举报
niexiaolu 发表于 2012-5-16 21:53
哥~~String类我都忘光了......

String类的方法很多,很灵活,用起来方便
回复 使用道具 举报
许涛 黑马帝 2012-5-16 22:06:52
19#
已修正。。。
回复 使用道具 举报
许涛 发表于 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. }
复制代码
这样输出就木有问题了~
回复 使用道具 举报
niexiaolu 发表于 2012-5-16 22:00
不过你这种做法结果输出是错的!!

不好意思!是我没注意看!结果没错!!正确的!!谢谢!!!
回复 使用道具 举报
许涛 发表于 2012-5-16 21:56
循环嵌套~

不过你这种做法结果输出是错的!!
回复 使用道具 举报
许涛 发表于 2012-5-16 21:56
循环嵌套~

高手!这道题都出了3种做法了!!
回复 使用道具 举报
许涛 黑马帝 2012-5-16 21:56:56
14#
本帖最后由 许涛 于 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. }
复制代码
回复 使用道具 举报
niexiaolu 发表于 2012-5-16 21:52
我就是翻出大一的C书背后的练习来做的!以前做过!几年过去!全还老师了! ...

哈哈~我前几天还去学校的在线程序设计广场刷题目来着~把以前用c++写的再用java写一遍~
回复 使用道具 举报
刘克方 发表于 2012-5-16 21:45
public class FlowerNum {

        /**

哥~~String类我都忘光了......
回复 使用道具 举报
于陈 发表于 2012-5-16 21:49
这个题目大一的时候学c++的时候还做过练习的
首先要解决的一个问题:就是取出这个三位数的每一位数字
这个 ...

我就是翻出大一的C书背后的练习来做的!以前做过!几年过去!全还老师了!
回复 使用道具 举报
数学学差了就是不行!谢谢各位!!好久没动脑子脑子都生锈了!
回复 使用道具 举报
于陈 中级黑马 2012-5-16 21:49:04
9#
这个题目大一的时候学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. }
复制代码
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马