2012-06-22 38 views
-1

我想从数组中生成每个可能的独特组合,但它不像生成所有组合一样简单.....例如。我有一个数组{A,B,C,d,E,F} ...我的结果应该是这样的......从数组中生成唯一组合,但每个组合中都包含每个元素。 (java)

  1. AB,CD,EF
  2. ABC,DEF
  3. 交流,BD,EF
  4. ABCF,编
  5. ....等

......基本上在每一个结果集中的数组的所有元素应当包括....此外“AB '和'ba'是一样的,'abcd'和'dcba'或'cbda'是一样的。之三....且无重复允许......“AAA”或“AA”是无效的......将不胜感激,如果有人可以提供一个解决这个问题....

+1

这是离散数学作业吗? – ametren

+1

1)这个作业(如果是的话请添加作业标签)? 2)你到目前为止尝试过什么? 3)这不是'请提供代码'网站! – home

+0

嗨...这不是一项家庭作业... {a,b,c,d,e,f}是产品的组成部分,我正在尝试创建所有可能的组装组合......我尝试创建组合该阵列,但似乎并没有工作... – blublubla

回答

0
String [] new_array=new String[N]; 
array.length=length.of("befdac"); 
for(int i=0;i < array.length;i++) //this is first digit 

{ 

for(int j=0;j < array.length;j++) //this is second digit 
{ 
if(i==j)continue; 
     ................ same with other digits 

     { 
     if((i==j)||(i==k)) continue; 
     // start counting in this most inner block 
     new_array[i][j][k][l]...[last_digit]=byte(i+65)+byte(j+65)+byte(k+65)+.....+byte(last_digit+65); 
     //65=a, 66=b,...... 

     } 
} 
} 

new_array [ ] [] [] [] ... []将是你的代码,我没有尝试过。最好的事情你自己做。这并未优化。只是作出第一个答案获得一些积分

+0

这对我没有任何意义。例如'byte(...)'方法来自哪里?这不是关于数字,而是关于人物。此外,你应该提供你的代码的详细解释。 – home

0

我建议你建立所有可能的独特的设置大小集。然后以所有可能的顺序插入所有可能的值。例如,有5个可能的值,您有设置的大小:

1 1 1 1 1 
1 1 1 2 
1 2 2 
1 1 3 
1 4 
2 3 
5 

现在,将实际值放入集中。对于第一套集大小的,我们得到:

a, b, c, d, e 

,因为所有的设置都是一样的大小,所以跳到第三套集大小的这是不是很有趣。在这里,我们填集,然后将它们转移,给我们:

a, bc, de 
b, cd, ea 
c, de, ab 
d, ea, bc 
e, ab, cd 

这不是一个完整的解决方案,但我已经一分为二的问题,我认为你可以把它从那里。

相关问题