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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Godream 中级黑马   /  2013-8-14 23:52  /  2564 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



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


评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

12 个回复

倒序浏览
本帖最后由 王清华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里面怎么实现,你看看吧,能够理解的话自己改一下。

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
  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:44 编辑

琢磨琢磨......

回复 使用道具 举报
EYE_SEE_YOU 发表于 2013-8-15 07:37
一大早的给楼主做了个递归算法,自己都觉得非赞不可

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

点评

好吧,没有这些关键字来控制程序 那我只能System.out.println(1+2+....+n);  发表于 2013-8-15 10:32
回复 使用道具 举报
本帖最后由 狐灵 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 很给力!

查看全部评分

回复 使用道具 举报 2 0
还真没想到用短路与!!
又长见识了!!
回复 使用道具 举报
狐灵 中级黑马 2013-8-15 20:36:43
8#
深受毒害,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:32
回复 使用道具 举报
狐灵 中级黑马 2013-8-15 21:49:31
9#
狐灵 发表于 2013-8-15 20:36
深受毒害,Java啊,进去出不来了还。话说还有一个呢

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

回复 使用道具 举报
狐灵 发表于 2013-8-15 12:26
累加1-100,当作范例。

好犀利的说{:soso_e179:}
回复 使用道具 举报
狐灵 发表于 2013-8-15 12:26
累加1-100,当作范例。

累加100的例子好牛B,真心佩服。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马