2017-02-14 11 views
-4

私は組み合わせに問題があります。すべての組み合わせを検索6 number JAVA

は私が6番号から最後の番号をインクリメントし、最後の番号が1

50最後から二番目の増分がある場合、私はすべての順列を見つけ、このコードを持っている必要があります。しかし、私は組み合わせが欲しい。

すでにプログラムが生成されている場合は必要です1 2 3 4 5 6この番号を再度生成しないように1 2 3 4 5 6 6 5 4 3 2 1と6 1 2 3 4 5 ...と同じです

hladaj[N-2]++; 
    while(((hladaj[N-3]==hladaj[N-2])||(hladaj[N-2]==hladaj[N-4])||(hladaj[N-2]==hladaj[N-5])||(hladaj[N-2]==hladaj[N-6])||(hladaj[N-2]==hladaj[N-7]))){ 
     hladaj[N-2]++; 
    } 

    if (hladaj[N-2]>MAXC) { 
     hladaj[N-2]=hladaj[N-2]-MAXC;   
     hladaj[N-3]++; 

     while(((hladaj[N-3]==hladaj[N-2])||(hladaj[N-2]==hladaj[N-4])||(hladaj[N-2]==hladaj[N-5])||(hladaj[N-2]==hladaj[N-6])||(hladaj[N-2]==hladaj[N-7]))){ 
      hladaj[N-2]++; 
     } 
     while(((hladaj[N-3]==hladaj[N-2])||(hladaj[N-3]==hladaj[N-4])||(hladaj[N-3]==hladaj[N-5])||(hladaj[N-3]==hladaj[N-6])||(hladaj[N-3]==hladaj[N-7]))){ 
      hladaj[N-3]++; 
     } 

     if (hladaj[N-3]>MAXC) { 
      hladaj[N-3]=hladaj[N-3]-MAXC;     
      hladaj[N-4]++; 
      while(((hladaj[N-3]==hladaj[N-2])||(hladaj[N-3]==hladaj[N-4])||(hladaj[N-3]==hladaj[N-5])||(hladaj[N-3]==hladaj[N-6])||(hladaj[N-3]==hladaj[N-7]))){ 
       hladaj[N-3]++; 
      } 

      while(((hladaj[N-4]==hladaj[N-2])||(hladaj[N-3]==hladaj[N-4])||(hladaj[N-4]==hladaj[N-5])||(hladaj[N-4]==hladaj[N-6])||(hladaj[N-4]==hladaj[N-7]))){ 
       hladaj[N-4]++; 
      }   


      if (hladaj[N-4]>MAXC) { 
       hladaj[N-4]=hladaj[N-4]-MAXC; 
       hladaj[N-5]++; 

       while(((hladaj[N-4]==hladaj[N-2])||(hladaj[N-3]==hladaj[N-4])||(hladaj[N-4]==hladaj[N-5])||(hladaj[N-4]==hladaj[N-6])||(hladaj[N-4]==hladaj[N-7]))){ 
        hladaj[N-4]++; 
       } 

       while(((hladaj[N-5]==hladaj[N-2])||(hladaj[N-3]==hladaj[N-5])||(hladaj[N-4]==hladaj[N-5])||(hladaj[N-5]==hladaj[N-6])||(hladaj[N-5]==hladaj[N-7]))){ 
        hladaj[N-5]++; 
       } 


       if (hladaj[N-5]>MAXC) { 
        hladaj[N-5]=hladaj[N-5]-MAXC; 
        hladaj[N-6]++; 

        while(((hladaj[N-5]==hladaj[N-2])||(hladaj[N-3]==hladaj[N-5])||(hladaj[N-4]==hladaj[N-5])||(hladaj[N-5]==hladaj[N-6])||(hladaj[N-5]==hladaj[N-7]))){ 
         hladaj[N-5]++; 
        } 

        while(((hladaj[N-6]==hladaj[N-2])||(hladaj[N-3]==hladaj[N-6])||(hladaj[N-4]==hladaj[N-6])||(hladaj[N-5]==hladaj[N-6])||(hladaj[N-6]==hladaj[N-7]))){ 
         hladaj[N-6]++; 
        } 

        if (hladaj[N-6]>MAXC) { 
         hladaj[N-6]=hladaj[N-6]-MAXC; 
         hladaj[N-7]++; 

         while(((hladaj[N-6]==hladaj[N-2])||(hladaj[N-3]==hladaj[N-6])||(hladaj[N-4]==hladaj[N-6])||(hladaj[N-5]==hladaj[N-6])||(hladaj[N-6]==hladaj[N-7]))){ 
          hladaj[N-6]++; 
         } 


         while(((hladaj[N-7]==hladaj[N-2])||(hladaj[N-3]==hladaj[N-7])||(hladaj[N-4]==hladaj[N-7])||(hladaj[N-5]==hladaj[N-7])||(hladaj[N-6]==hladaj[N-7]))){ 
          hladaj[N-7]++; 
         } 

         if (hladaj[N-7]>MAXC) { 
          hladaj[N-7]=MAXC; 
          return true;          
         }         
        } 
       }     
      }    
     } 

このコードは、1 2 3 4 5 6、6 5 4 3 2 1を生成する組み合わせのいずれかを生成する場合、私は、この組み合わせは全く再び生成する必要はありません。

あなたは私のコードや...

を修正するためのいくつかのアイデアを持っていてください(私は[6]処理された生成された番号のすべてを必要とするが、私は同じ番号で120回動作するため、今、私は時間を無駄にする。)

ありがとう

答えて

0
public static void main(String[] args){ 
    int[] arr = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49}; 
    combinations2(arr, 7, 0, new int[7]); 
} 

static void combinations2(int[] arr, int pocet, int startPosition, int[] result){ 
    if (pocet == 0){ 
     System.out.println(Arrays.toString(result)); 
     return; 
    }  
    for (int i = startPosition; i <= arr.length-pocet; i++){ 
     result[result.length - pocet] = arr[i]; 
     combinations2(arr, pocet-1, i+1, result); 
    } 
} 
関連する問題