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

解决方案 »

  1.   


    public class testSuanfa {
    public int sum=0; public void calc(int n) throws Exception{
    System.out.println(n);
    byte[] bs = new byte[n];
    sum += n;
    calc(n-1);
    return;
    }

    public static void main(String[] args) {
    testSuanfa t= new testSuanfa();
    int n=100; 
    try{
    t.calc(n);
    }catch(Exception e){}
    System.out.println("sum(" + n + ") = " + t.sum);
    }}
      

  2.   

    递归算法,用数据下标越界来判断是否到达N,没用任何关键字及判断条件。运行了一下好像是对的 static int a[];
    public static void main(String[] args) {
    int n = 10;//用户数据指定值
    a= new int[n];
    Test t = new Test();
    int sum = t.a(0);
    System.out.println(sum);
    }
    public int a(int n)
    {
    int i = n+1;
    try{
    a[n] = i;

    }
    catch(Exception e)
    {
    return 0;
    }
    return i+a(i);
    }
      

  3.   

    这些限制太扯淡了,用try catch控制程序结构,只有大学里面的垃圾老师才会出这种鬼题目,我做了十几年的java开发也从来没有这么用过啊。
      

  4.   

    刚才是利用Exception的,以下有个不用Exception的更简洁:
    public class testSuanfa {
    public int sum=0; public boolean calc(int n){
    sum += n;
    return (n==0)||calc(n-1);
    }

    public static void main(String[] args) {
    testSuanfa t= new testSuanfa();
    int n=100; 
    t.calc(n);
    System.out.println("sum(" + n + ") = " + t.sum);
    }}
      

  5.   

    虽然没出现if但是(n==0)是条件判断,你返回类型又是boolean,题目最后一行不是不让用条件判断嘛
      

  6.   

    鉴于以上代码都是通过错误陷阱判断n<0,我表示c语言可以定义为无符号性的整数,vb似乎不能,莫非真悲剧?!
      

  7.   


    这有点强词夺理了
    条件判断语句(A?B:C)怎么就等于条件判断n==0了,又哪里说不让返回boolean了
      

  8.   


    //连除都不能用,逼我出大招~~
        public static void main(String[] args) {
            System.out.println(sum(100));
        }    /** 求和公式 (n+1)*n/2
         */
        public static int sum(int n) {
            return get(n + 1, n) >>> 1;
        }    /** return d*n
         */
        public static int get(int d, int p) {
            try {
                int k = 1 % p;
            } catch (java.lang.Exception e) {
                return 1;
            }
            return d + get(d, p - 1);
        }
      

  9.   


    //除法也不能用,只能出大招了
        public static void main(String[] args) {
            System.out.println(sum(100));
        }    /** 求和公式 (n+1)*n/2
         */
        public static int sum(int n) {
            return get(n + 1, n) >>> 1;
        }    /** return d*n
         */
        public static int get(int d, int p) {
            try {
                int k = 1 % p;
            } catch (java.lang.Exception e) {
                return 1;
            }
            return d + get(d, p - 1);
        }
      

  10.   

    我是楼主:请问一下定义这个byte[] bs = new byte[n];
    有什么作用?还有就是byte数组的用法有什么?谢谢!
      

  11.   


    这句话的唯一作用就是产生异常抛出,当n<0时,这句话报错抛出异常,从而让递归函数有机会终止。
      

  12.   

    很有意思的一道题,我来试着总结一下:以上我、柯南和bawgiitx给出了4个解法,4个全部用递归来替代循环累加,其中3个以故意抛出异常来终止递归,1个以布尔类型的或操作来正常终止递归。
    3种异常终止递归的原理殊途同归,只是制造异常的方法各不相同,分别是初始化数组,访问数组,对0取模个人觉得,bawgiitx的写法既然还是用到递归来求乘积,为了求商另写一个方法不够简明,因为用递归已经可以直接求和了。但同时bawgiitx用位移操作来取除以2的商,又堪称一大亮点。我吃晚饭的时候还在考虑这个题有没有别的解法,我想按公式计算,但除以2卡住了我,受到bawgiitx的启发,现在我可以写出不用递归,同时也是最简明,同时也可能最让出题者吐血的第5种解法了,如下:
    public class testCalc {
    public static int sum(int n) {return (int)(Math.pow(n, 2) + n)>>>1; }
    public static void main(String[] args) {
    System.out.println(sum(100));
    }
    }
      

  13.   

    (A?B:C)只是举个例子,题目的意思明显是全部判断语句都不能用