2016-08-31 5 views
0

제가 문제가 있습니다. 1-49까지의 숫자가 있습니다. 이제 질문은 어떻게 주어진 샘플에서 최대 6 개의 랜덤 세트를 얻을 수 있습니까? . 같은범위에서 주어진 배열로부터 여섯 개의 고유 한 조합 세트를 얻으십시오

int[] a1 = { 1, 2, 3 ,5,6,7 ... 49}; 

내가 무엇을 얻으려고 노력하고하는 수의 최대 출력 또는 번호

1,2,3,4,5,6 
2,1,4,5,8,9 
2,1,0,2,4,5 
................ 

아래처럼 1부터 49까지 그 하나 개의 큰 배열에서 얻을 수있는 방법 많은 독특한 숫자 또는 배열의 조합 내가 가질 수있는 길이가 6 개인 독특한 배열. 당신이 필요로하는 무슨, 내가 배열을 읽는 루프를 작성 시도,하지만 어떻게 어디 제대로 질문을 이해하면 내가 더

 for(int x=0;<a1.length;x++) 
     { 
      // here i believe i must turn the captured information 
     // into a muti dimentional array to cpature like '1,2,3,4,5,6' but how. am stuck 
     } 
+3

없이 반복없이

자바 알고리즘 조합

또는

C#을 알고리즘 조합을하지만, 그것은 단지 조합과 이항 계수되지 않습니다 : 다음과 같이 키워드 시도 문제? 다음은 솔루션에 대한 설명입니다. https://en.wikipedia.org/wiki/Combination#Enumerating_k-combinations – RafazZ

+2

또한 무언가를 시도하고 이미 시도한 코드를 보여 주면 당신이 잘못하고있는 것을 지적하시오/맞죠? – RafazZ

+0

당신은 반복되는 세트의 조합을 가질 수 있지만 전체 세트는 다른 모든 숫자와 유사해서는 안됩니다. 예를 들어 1,2,3,4,5,6,3,3,1,4,2,5 – Bels

답변

2

보다 갈 수 붙어있다 여섯 개 임의의 숫자를 캡처 정직합니다 binomial coefficientn!/k! (n - k)!이 경우 49!/(6! * (49 - 6)!) = 13983816입니다. 당신이 알고 싶은 유일한 것이 가능한 조합의 수라면 코드를 작성할 필요가 없습니다.

정말로 모두 나열하고 싶다면 약간의 인내가 필요합니다. 이를 달성하는 한 가지 방법은 재귀 적 접근 방식을 사용하는 것입니다.

public class NOverK { 

    private static final int[] numbers = new int[6]; 
    private static final int MAX = 49; 

    private static void output() { 
     System.out.println(); 
     for (int n : numbers) { 
      System.out.print(n + " "); 
     } 
    } 

    private static void allCombinations(int x, int start) { 
     if (x > 0) { 
      for (int i = start; i <= MAX; i++) { 
       numbers[numbers.length - x] = i; 
       allCombinations(x - 1, i + 1); 
      } 
     } else { 
      output(); 
     } 
    } 

    public static void main(String[] args) { 
     allCombinations(6, 1); 
    } 
} 
+0

내가 그들을 목록에 넣고 싶을 것입니다. – Bels

+1

@Bels 예상만큼 오래 걸리지 않습니다. 내 시간은 185 초입니다. machine (System.out.print로 인해 - 알고리즘 없이는 더 빠름) – apophis

1

이 질문은 과거에 몇 번이나 스택 오버 플로우가 발생했을 때 묻습니다. 예를 들어,이 답변을보고 :

Click here: Algorithm to return all combinations of k elements from n

이 질문에 대한 답도 서로 다른 프로그래밍 언어 (자바, 파이썬, C, C 번호 등)에서 귀하의 질문의 다양한 솔루션을 포함하고있다. 요구 사항을 충족하는 솔루션을 확인하거나 조정하십시오.

당신은 키워드 스택 오버플로 (오른쪽 상단 모서리에있는 검색 필드)에서 다른 질문/답변을 검색 할 수

[알고리즘] [조합]

구글 검색 질문의 다양한 솔루션으로 이어질 것 , 너무. 반복 내가 질문을 오해 될 수

관련 문제