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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄小贝 高级黑马   /  2012-10-19 00:53  /  1199 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

饭后一道题~天天好心情~

题目:打印所有的“水仙花数 ,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个水仙花数,因为153=1的三次方+5的三次方+3的三次方。

这道题我做的稍微代码长了些,思维方式导致~ 看了所谓的标准答案,比较简洁~这里都贴出来吧

先是我的:





  1. package day3;

  2. /**
  3. * 题目:打印所有的"水仙花数"
  4. * 所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
  5. *
  6. * @author yellowbaby
  7. *
  8. */
  9. public class Test {

  10.         public static void main(String[] args) {

  11.                 int hundreds[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };// 百位
  12.                 int tens[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };// 十位
  13.                 int units[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };// 个位

  14.                 for (int unit : units) {
  15.                         for (int ten : tens) {
  16.                                 for (int hundred : hundreds) {
  17.                                         if(getCubSum(unit, ten, hundred) == getNormalSum(unit, ten, hundred)){
  18.                                                 System.out.println(getNormalSum(unit, ten, hundred));
  19.                                         }

  20.                                 }

  21.                         }
  22.                 }

  23.         }

  24.         /*
  25.          * 得到该三位数三位的立方和
  26.          */
  27.         private static int getCubSum(int unit, int ten, int hundred) {
  28.                 return unit * unit * unit + ten * ten * ten + hundred * hundred
  29.                                 * hundred;
  30.         }

  31.         /*
  32.          * 得到该三位数的值
  33.          */
  34.         private static int getNormalSum(int unit, int ten, int hundred) {
  35.                 return unit + ten * 10 + hundred * 100;
  36.         }

  37. }
复制代码
这是答案:


评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

4 个回复

倒序浏览
分享了,多多学习
回复 使用道具 举报
这是我的做法
  1. /*
  2. 关键是找出分解个位,十位,百位的方法。
  3. */
  4. class Test03
  5. {
  6.         public static void main(String[] args)
  7.         {
  8.                 for (int n = 100; n<1000 ; n++ )
  9.                 {
  10.                         int n1 = n%10;
  11.                         int n2 = n/10%10;
  12.                         int n3 = n/100%10;
  13.                         if ((n1*n1*n1+n2*n2*n2+n3*n3*n3) == n)
  14.                         {
  15.                                 System.out.print(n+"\t");
  16.                         }
  17.                 }
  18.         }
  19. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
对于这两种算法,我个人的看法是,你的这种代码精简,但是数学基础不好的人会很费解,我的虽然看起来麻烦,但是通俗易懂~
回复 使用道具 举报
黄小贝 发表于 2012-10-19 11:46
对于这两种算法,我个人的看法是,你的这种代码精简,但是数学基础不好的人会很费解,我的虽然看起来麻烦, ...

逻辑编程的基础还是数学嘛,每个人都有自己的思路,这个没问题啊。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马