创建数字组合

时间:2014-03-13 18:48:14

标签: java combinations combinatorics

任务是找到数字{1,2,3 ... N}的排列。 N <= 16。 问题在于条件:每个数字必须只使用一次,排列应该是N尺寸。并且每个排列应该是数组,因为它将被测试。

输入给出一个排列。 主要任务是找到所有排列,它们与第一个排列具有相同的差异。 例如,给出

12  3  6  1  9 11  8  5  2  4  7 10

差异为-9,3,-5,8,2,-3,-3,-3,2,3,10

因此,有12种排列,具有相同的排列差异。

 3 11  8  5  2  4  6  9 12  7 10  1
 3  6  9 11  8  5  2  4 12  7 10  1 
 4 12  7 10  1  3  6  9 11  8  5  2 
 4  7 10 12  3  6  1  9 11  8  5  2 
 4  6  9 12  7 10  1  3 11  8  5  2 
 6  9 12  7 10  1  3 11  8  5  2  4 
 9 11  8  5  2 10 12  3  6  1  4  7
11  8  5  2 10 12  3  6  1  4  7  9 
11  8  5  2  4 12  7 10  1  3  6  9 
11  8  5  2  4  7 10 12  3  6  1  9 
12  3  6  1  9 11  8  5  2  4  7 10 
12  3  6  1  4  7  9 11  8  5  2 10

我已经编写了每个排列的检查,但现在我无法正确找到所有排列(没有重复的数字)来检查它们。

这是

in - N的排列,de - 差异的排列

 boolean Check(int[] in, int[] de){

     for(int i=0; i<de.length;i++){
     if(in[0]+de[i]==in[1]){
         int[] in2=new int[in.length-1];
         if(in2.length==1){
         return true; }
         for(int j=1; j<in.length;j++){
             in2[j-1]=in[j];
         }
         int[] de2=new int[de.length-1];
         for(int j=0; j<de.length;j++){

         if(de[j]!=de[i]){
             de2[j]=de[j];}}

         Check(in2,de2);
         return false;
  }

      return false;
  }
    return false;
 }   

0 个答案:

没有答案