当前位置: 首页 > 知识库问答 >
问题:

需要帮助查找所有可能的组合,方法几乎完成

盖泽宇
2023-03-14

我似乎无法让这段代码发挥作用。我所做的是用2位数字的所有可能组合填充一个数组(每个数字分别代表一个形状和颜色)。然后,我尝试使用这个数组来填充一个2d数组,在其中我创建了前一个数组中包含的元素的所有可能的组合。出于某种原因,我的2d数组中填充了所有的“21”,而不是任何类型的组合。

如果需要的话,我可以把剩下的代码放在类中,但是它太长了。这个方法中的最后一个循环只是用来打印它们以供测试,之后会被删除。

public void combinations()
{
    combinations = new int[numShapes*numColors];
    int index = 0;
    for(int l = 1; l <= numShapes; l++)
        for(int h = 1; h <= numColors; h++)
            if(index + 1 != combinations.length + 1)
                combinations[index++] = (l*10) + h;
            else
                break;

    int[][] combs = new int[(int)Math.pow((numShapes*numColors),numPositions)][numPositions];

    //Fills the array with all '21' , fix this
    int ind = 0;
    for(int f = 0; f < 16; f++)
        for(int i = 0; i < numShapes; i++)
            for(int j = 0; j < numColors; j++)
                if(ind != combs.length+1){
                    combs[ind] = new int[]{combinations[numShapes], combinations[numShapes], combinations[numColors]};
                    ind++;
                }
                else
                    break;

    for(int p = 0; p < 2; p++){
        for(int g = 0; g < 3; g++){
            System.out.print(testFormat(combs[p][g]/10, combs[p][g]%10) + " ");
        }
        System.out.println();
    }
}

共有1个答案

池庆
2023-03-14
    int[][] combs = combinationsOf(combinations, 5);

    for (int i = 0 ; i < combs.length ; i++)
    {
        for(int j = 0 ; j < combs[i].length ; j++)
        {
            System.out.print(combs[i][j] + ", ");
        }
        System.out.println("");
    }


public static int[][] combinationsOf(int[] colorShape, int numPositions)
{
    int[][] combs = new int[(int)(Math.pow(colorShape.length, numPositions))][numPositions];

    int[] holding = new int[numPositions];
    for(int i = 0 ; i < numPositions ; i++)
    {
        holding[i]=0;
    }

    for(int i = 0 ; i < combs.length ; i++)
    {
        for(int j = 0 ; j < numPositions ; j++)
        {
            combs[i][j] = colorShape[holding[j]];   
        }
        incrementHolding(holding, colorShape.length);
    }
    return combs;
}

public static boolean incrementHolding(int[] holding, int max)
{
    for(int i = holding.length-1 ; i >= 0 ; i--)
    {
        if(holding[i]+1 == max)
        {
            if(i==0)
                return false;
            holding[i]=0;
        }
        else
        {
            holding[i]++;
            return true;
        }
    }
    return true;
}

这对我现在有效。不过这是一大堆代码。跑步需要一段时间。

注意:在5个位置,阵列有9766525个元素。

 类似资料:
  • 问题内容: 考虑这种情况… 我有1000美元,我想购买上面列出的东西。 我想花全部钱 因此,我需要一个查询,该查询将给出所有产品中多少单位的价格为1000 $ 有什么帮助吗? 问题答案: 这是硬编码的,几乎没有灵活性。我的系统花了2分钟才能运行。但是可能会有所帮助,如果没有,抱歉。fnGenerate_Numbers是一个表函数,它返回参数范围内的整数。 做到这一点的方法。

  • 我似乎无法从用户输入的分数中计算出平均分数。我也不能让它停止例外输入大于100或小于0。有人能告诉我我做错了什么吗?谢谢

  • 我有这张桌子: 这是我的SQL查询: 我想要的查询是: > 我希望获得符合某些条件的记录,特别是字段在最近24小时内的记录 我需要获得紧接在#1中的记录之前的记录 将#1中的结果进一步过滤到其价格列在记录的历史记录中具有不同值(而不是-1)的记录 我面临的问题是查询太慢了。我有一百万张唱片。执行查询大约需要2分钟。我猜GROUP BY会使查询变慢。我想我需要做一个综合指数,但我不知道怎么做。 解释

  • 我需要一些关于anyOf javadoc将来使用的文献的帮助。 <代码>静态CompletableFuture 这个“相同的结果”是什么意思?与什么相同?与CompletableFuture数组中的任何其他未来相同? 谢谢Venkatesh Laguduva

  • 问题内容: 假设我有以下表格: 标签 id:整数 名称:字符串 帖子 id:整数 正文:文本 标记 id:整数 tag_id:整数 post_id:整数 我将如何编写一个查询来选择所有带有以下所有标记(标记表的名称属性)的标记的查询:“奶酪”,“葡萄酒”,“巴黎”,“宽限期”,“城市”,“风景区”,“艺术” 另请参阅:需要有关SQL查询的帮助以查找带有大多数指定标签的内容(注意:相似,但不能重复!

  • 问题内容: 我想从一个名为Sorels的表更新一个名为的表。它们之间的链接是的等于Sorels表的。这是我对Merge语句的第一次尝试,并且我正在尝试学习语法。 运行此命令时,出现以下错误: 错误10/22/2009 1:38:51 PM 0:00:00.000 SQL Server数据库错误:关键字’ON’附近的语法不正确。46 0 添加的信息* 在建议了第一个修复程序之后,代码如下: 现在我得