黑马程序员技术交流社区

标题: Java基础算法题(第三天) [打印本页]

作者: 黄小贝    时间: 2012-10-19 00:53
标题: Java基础算法题(第三天)
饭后一道题~天天好心情~

题目:打印所有的“水仙花数 ,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。例如: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. }
复制代码
这是答案:



作者: 王龙    时间: 2012-10-19 09:27
分享了,多多学习
作者: 刘伟平    时间: 2012-10-19 11:41
这是我的做法
  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. }
复制代码

作者: 黄小贝    时间: 2012-10-19 11:46
对于这两种算法,我个人的看法是,你的这种代码精简,但是数学基础不好的人会很费解,我的虽然看起来麻烦,但是通俗易懂~

作者: 刘伟平    时间: 2012-10-19 11:50
黄小贝 发表于 2012-10-19 11:46
对于这两种算法,我个人的看法是,你的这种代码精简,但是数学基础不好的人会很费解,我的虽然看起来麻烦, ...

逻辑编程的基础还是数学嘛,每个人都有自己的思路,这个没问题啊。




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