黑马程序员技术交流社区

标题: 累加怎么算? [打印本页]

作者: Godream    时间: 2013-8-14 23:52
标题: 累加怎么算?


题目:求1+2+…+n
要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。



作者: 王清华0    时间: 2013-8-15 04:50
本帖最后由 王清华0 于 2013-8-15 04:53 编辑

这个问题真心难啊。先旨声明,我没有做出来,以下只是思路,看能不能起到抛砖引玉的作用。
第一条:累加需要遍历嘛,不允许循环的话,只能想到迭代函数的方式,但是迭代函数最后的跳出也是需要判定的啊,又不能用if,所以这个想法作废。
第二条:然后想到了,可以用构造函数的例子来计数啊,只要建立一个数组不就好了。代码:
  1. public class Test
  2. {
  3.         public static void main(String args[])
  4.         {
  5.                
  6.                 int n = 100;//这里假设n=100。
  7.                 Inner[] in = new Inner[n];
  8.                 System.out.println("最终结果为:"+Inner.num);               
  9.         }
  10. }

  11. class Inner
  12. {
  13.         static int num = 0;
  14.         Inner()
  15.         {
  16.                 num=num+(num+1);
  17.         }
  18. }
复制代码
运行结果居然是0!!立刻想到:不对,java每一个类都必须new一遍才能执行构造函数。那么 又牵扯到遍历赋值了。还是没成功。

第三条:百度一下吧。。。找到了很多,但是大部分都是c++的语言写的。思路反正我是没有看懂几个。。。这里给你一个网页,你看看他的解答:
http://blog.csdn.net/yuucyf/article/details/6400601
他的第一种思路用到了乘法,我觉得违反了题目要求,第二种思路跟我的一样,但是c++的直接new了数组就调用了构造函数。不需要分别分配内存空间。第三种用到了模板元,c++学的太久,早就忘了,没看懂,也不知道java里面怎么实现,你看看吧,能够理解的话自己改一下。
作者: EYE_SEE_YOU    时间: 2013-8-15 07:37
  1. import java.util.Scanner;

  2. public class haha
  3. {
  4.         static int sum=0;
  5.         static int i=0;
  6.        
  7.         public static void main(String[]args)
  8.         {
  9.                 System.out.print("输入n=");
  10.                 Scanner scanner=new Scanner(System.in);
  11.                 int n=scanner.nextInt();
  12.                 test(n);
  13.         }

  14.         public static  void test(int n)
  15.         {
  16.                 if (i<n)
  17.                 {
  18.                 i++;
  19.                 sum+=i;
  20.                 System.out.println("i="+i+"and sum="+sum);
  21.                 test(n);
  22.                 }
  23.                 else
  24.                 {
  25.                         return ;
  26.                 }
  27.         }
  28. }
复制代码
一大早的给楼主做了个递归算法,自己都觉得非赞不可
作者: 狐灵    时间: 2013-8-15 08:43
本帖最后由 狐灵 于 2013-8-15 08:44 编辑

琢磨琢磨......


作者: 王清华0    时间: 2013-8-15 10:24
EYE_SEE_YOU 发表于 2013-8-15 07:37
一大早的给楼主做了个递归算法,自己都觉得非赞不可

那个,递归代替循环没问题,但是你这不是用了if了么??

作者: 狐灵    时间: 2013-8-15 12:26
本帖最后由 狐灵 于 2013-8-15 12:31 编辑

累加1-100,当作范例。
  1. package com;

  2. class SumN {
  3.     private int result = 0;
  4.     private int sum;
  5.   
  6.     public int cal(int sum) {
  7.         this.sum = sum;
  8.         getSum(0);
  9.         return result;
  10.     }

  11.     public boolean getSum(int i) {
  12.         result = result + i;
  13.         boolean tag = (i != sum) && (getSum(i+1));
  14.         return tag;
  15.     }
  16. }

  17. public class Test {
  18.      public static void main(String[] args) {
  19.         SumN sumN = new SumN();
  20.         System.out.println(sumN.cal(100));
  21. }
  22. }
复制代码

作者: 封号了...    时间: 2013-8-15 14:24
还真没想到用短路与!!
又长见识了!!
作者: 狐灵    时间: 2013-8-15 20:36
深受毒害,Java啊,进去出不来了还。话说还有一个呢
  1. public class Test {
  2.     public static void main(String[] args) {
  3.       int n = 100;
  4.       System.out.println(n*(n+1)/2);
  5.     }
  6. }
复制代码

作者: 狐灵    时间: 2013-8-15 21:49
狐灵 发表于 2013-8-15 20:36
深受毒害,Java啊,进去出不来了还。话说还有一个呢

哦 是哈~ 一激动 把这个要求忘记了


作者: Godream    时间: 2013-8-15 22:37
狐灵 发表于 2013-8-15 12:26
累加1-100,当作范例。

好犀利的说{:soso_e179:}

作者: 王清华0    时间: 2013-8-16 01:23
狐灵 发表于 2013-8-15 12:26
累加1-100,当作范例。

累加100的例子好牛B,真心佩服。





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