1到99的数字,不限制加数的情况下,有多少可能它们的和等于100,如:
1+99=100, 1+2+97=100, 10+10+10+70 = 100.........小弟先谢谢各位大虾了

解决方案 »

  1.   

    如果是求多少种的话(不用列出所有的东西)应该可以用递归吧:
    func(100)=func(1)*func(99)+func(2)*func(98)+...+func(99)*func(1)但是,这样的话1+99和99+1是算两种的
    如果要求是算一种的话,暂时没什么想法
      

  2.   

    接上:
    笨拙的方法-〉把求出来的结果排序后放入一个map。(此时传参需要将既得的加数传进来/返回),最后通过map的大小确定最终结果
      

  3.   

    算法如下:
    1+1+.....+1=100;   //共100项
    2+1+.....+1=100;   //少掉一项
    3+1+.....+1=100;   //少掉两项
    .
    .
    .
    99+1=100.          //少掉98项
    那么变量就是相加项数逐渐减少。
    我JAVA是初学者,这样代码有点写不出来。望高手帮个忙。小弟先谢了。
      

  4.   

    这应该不是一个java问题!而是个数学问题!
      

  5.   

    如果是求多少种的话(不用列出所有的东西)应该可以用递归吧:
    func(100)=func(1)*func(99)+func(2)*func(98)+...+func(99)*func(1)code:
    public static int func(int add){
        if(add ==1)
            return 1;
        int sum = 0;
        for(int i=1;i<=add/2;i++){
            sum += func(i)*func(add-i);
        }
        return sum;
    }
    //上述代码会有重复,原因已表
     且当 抛砖引玉~
      

  6.   

    //所加的数没有重复的情况
    public class OneHundred_AddPossibility {
    static long count = 0 ;
    public static void main(String[] args){
    decompose(100,0) ;
    System.out.println(count) ;
    }

    public static void decompose(int number,int flag){
    //System.out.println(flag +  "  "  + number);
    flag ++ ;
    int num ;
    int maxflag = number/2 ;
    if(number%2!=0){
    maxflag += 1;
    }
    for(int i = flag ; i < maxflag ; i++){
    num = number - i ;
    count++ ;
    if(num > i){
    decompose(num,i) ;
    }

    }

    }
    }