有a,b,c,d,e
5个中任选2的排列,如:ab,ac,ad,ae,bc,bd,be,cd,ce,de   ab与ba算一个。
5个中选任意个(包含0个),如:,a,b,c,d,e,ab,abc,abcde,abcd,cbed.....    abc与bca与cab算一个
5选5:abcde,acebd......

解决方案 »

  1.   

    如果仅仅就是这5个的话,利用ASCii码,如果他们相加的和一样,就认为他们一样。
    太多的话,再想想,关注一下...
      

  2.   

    用穷举法+重复判断复杂度太高。
    比如5选3的话,做3层循环,我没用递归,这样结构看得更清楚些。
    伪代码:int r[3];
    for(int i='a';i<='c';i++)
    {
        r[0] = i;
        for(int j = i+1;j <= 'd';i++)
        {
            r[1] = j;
            for(int k = j+1;k <= 'e';k++)
            {
                r[2] = k;
                输出r或返回r值;
            } 
        }
    }
    可以不重复的找出所有结果
    当然用递归效率最高。自己写吧。
      

  3.   

    sky_boxer(饿鱼骨头) 
    这样也麻烦,它是5选任意组合,你的做法也麻烦
    对于只有5个数,可以写成2维数组:
    char [5][5] M1 = {a,b,c,d,e,0}.... (5个都一样)//数组不能制定大小,我这里指定是为了看得更明白
    List [] lt1;//放需要的组合
    List [] lt2;//放组合相加的结果
    for(int i=0;i<5;i++){
      for(int j=0;j<5;j++){
         5层循坏可以选出全部的数,把它放到List1里面,它的形式应该是M1[i]M1[j]M1[?]M1[?]M1[?],然后把里面的0去掉,同时让他们相加,用结果于之前相加的结果进行比较(具体它的每一次相加结果,你也应该把它放到另一个List2里面),一样就不add到List1里面,到最后,你的List1里面就应该是你要的了。5选任意没有重复的。具体实现过程应该很简单了。自己写吧。我只想到这样,其他的想不出来了!!唉
      

  4.   

    sorry  sorry
    算法有BUG,a+d = b+c,但是它们是不同的。
    这样,你取出时
    利用arrays.sort(数组),把它排序一下也就是在
    char ch[] = new char[](M1[i]M1[j]M1[?]M1[?]M1[?]);
    arrays.sort(ch);//把ch排序,再去掉里面的0元素,在toString,再把它ADD到List里面,取下一个数时,只要与List里面的数比较一下,
    for(int z=0;z<list.size();z++)
    {
       if( str.equals(list.get(i)))
               add;
            else
                  continue;
    }