Arrays 从给定范围的数组中获取六个唯一组合的集合

Arrays 从给定范围的数组中获取六个唯一组合的集合,arrays,random,Arrays,Random,我确实有一个问题,我有1-49之间的数字,现在的问题是如何从给定的样本中得到六个随机集的最大数量。像 int[] a1 = { 1, 2, 3 ,5,6,7 ... 49}; 从1到49这样的一个大数组中,我可以得到多少个唯一的数字或数组组合 1,2,3,4,5,6 2,1,4,5,8,9 2,1,0,2,4,5 ................ 我试图获得的是最大输出或可能的长度为6的唯一数组的数量。老实说,我已经尝试过写一个循环来读取数组,但是如何捕获六个随机数字是我遇到的问题,我可以做

我确实有一个问题,我有1-49之间的数字,现在的问题是如何从给定的样本中得到六个随机集的最大数量。像

int[] a1 = { 1, 2, 3 ,5,6,7 ... 49};
从1到49这样的一个大数组中,我可以得到多少个唯一的数字或数组组合

1,2,3,4,5,6
2,1,4,5,8,9
2,1,0,2,4,5
................
我试图获得的是最大输出或可能的长度为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
       }

for(int x=0;如果我正确理解了您的问题,您需要的是
n!/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);
    }
}
公共类NOverK{
私有静态最终整数[]个数=新整数[6];
专用静态最终int MAX=49;
私有静态void输出(){
System.out.println();
用于(整数n:数字){
系统输出打印(n+“”);
}
}
私有静态void所有组合(int x,int start){
如果(x>0){

对于(int i=start;i如果我正确理解了您的问题,您需要的是
n!/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);
    }
}
公共类NOverK{
私有静态最终整数[]个数=新整数[6];
专用静态最终int MAX=49;
私有静态void输出(){
System.out.println();
用于(整数n:数字){
系统输出打印(n+“”);
}
}
私有静态void所有组合(int x,int start){
如果(x>0){

对于(int i=start;i这个问题在过去的堆栈溢出中已经被问过好几次了。例如,看看下面的答案:

这个问题的答案也包含许多不同编程语言(Java、Python、C、C#等)的问题解决方案。请查看或调整满足您需求的解决方案

您可以使用关键字在堆栈溢出(右上角的搜索字段)中搜索其他问题/答案

[算法][组合]

谷歌搜索也会为您的问题提供多种解决方案。请尝试使用以下关键词:

无重复的java算法组合


c#无重复的算法组合

这个问题在过去的堆栈溢出中曾被问过几次。例如,请看以下答案:

这个问题的答案也包含许多不同编程语言(Java、Python、C、C#等)的问题解决方案。请查看或调整满足您需求的解决方案

您可以使用关键字在堆栈溢出(右上角的搜索字段)中搜索其他问题/答案

[算法][组合]

谷歌搜索也会为您的问题提供多种解决方案。请尝试使用以下关键词:

无重复的java算法组合


c#无重复的算法组合

我可能误解了你的问题,但这不只是一个组合和二项式系数问题吗?下面是一个解决方案的解释:另外,为什么你不尝试一些东西,展示一些你已经尝试过的代码,我们将尝试指出你做得不对/对?你可以有一个重复集合的组合,但整个集合不能有与其他集合相似的所有数字。例如,1,2,3,4,5,6 23,3,1,4,2,5我可能误解了你的问题,但这不只是一个组合和二项式系数问题吗?下面是一个解决方案的解释:另外,你为什么不尝试一些东西并展示一些你需要的代码我已经试过了,我们将试着指出你做错了/对了什么?你可以有一组重复的集合,但整个集合不能有与其他集合相似的所有数字。例如,1,2,3,4,5,6 23,3,1,4,2,5我想列出它们down@Bels没有我想象的那么长:在我的机器上185秒(由于System.out.print-没有该选项的算法要快得多)我想列出它们down@Bels它没有我预期的那么长:在我的机器上运行185秒(由于System.out.print-没有它的算法要快得多)