为了账号安全,请及时绑定邮箱和手机立即绑定

用公式 N^R 的所有组合填充数组

用公式 N^R 的所有组合填充数组

守着星空守着你 2022-10-20 15:19:44
对于一个家庭作业问题,我需要用公式的所有组合填充一个数组N^R。变量R是常数并且是6。变量N不是常数,假设它是2. 所以2^6 = 64。现在我需要的是一个包含所有组合的数组(在这种情况下64)。我找到了一个完全符合我需要的网站,在这种情况下的输出应该是:[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 1],[0, 0, 0, 0, 1, 0],[0, 0, 0, 0, 1, 1],[0, 0, 0, 1, 0, 0],[0, 0, 0, 1, 0, 1],[0, 0, 0, 1, 1, 0],[0, 0, 0, 1, 1, 1],[0, 0, 1, 0, 0, 0],[0, 0, 1, 0, 0, 1],[0, 0, 1, 0, 1, 0],[0, 0, 1, 0, 1, 1],[0, 0, 1, 1, 0, 0],[0, 0, 1, 1, 0, 1],[0, 0, 1, 1, 1, 0],[0, 0, 1, 1, 1, 1],[0, 1, 0, 0, 0, 0],[0, 1, 0, 0, 0, 1],[0, 1, 0, 0, 1, 0],[0, 1, 0, 0, 1, 1],[0, 1, 0, 1, 0, 0],[0, 1, 0, 1, 0, 1],[0, 1, 0, 1, 1, 0],[0, 1, 0, 1, 1, 1],[0, 1, 1, 0, 0, 0],[0, 1, 1, 0, 0, 1],[0, 1, 1, 0, 1, 0],[0, 1, 1, 0, 1, 1],[0, 1, 1, 1, 0, 0],[0, 1, 1, 1, 0, 1],[0, 1, 1, 1, 1, 0],[0, 1, 1, 1, 1, 1],[1, 0, 0, 0, 0, 0],[1, 0, 0, 0, 0, 1],[1, 0, 0, 0, 1, 0],[1, 0, 0, 0, 1, 1],[1, 0, 0, 1, 0, 0],[1, 0, 0, 1, 0, 1],[1, 0, 0, 1, 1, 0],[1, 0, 0, 1, 1, 1],[1, 0, 1, 0, 0, 0],[1, 0, 1, 0, 0, 1],[1, 0, 1, 0, 1, 0],[1, 0, 1, 0, 1, 1],[1, 0, 1, 1, 0, 0],[1, 0, 1, 1, 0, 1],[1, 0, 1, 1, 1, 0],[1, 0, 1, 1, 1, 1],[1, 1, 0, 0, 0, 0],[1, 1, 0, 0, 0, 1],[1, 1, 0, 0, 1, 0],[1, 1, 0, 0, 1, 1],[1, 1, 0, 1, 0, 0],[1, 1, 0, 1, 0, 1],[1, 1, 0, 1, 1, 0],[1, 1, 0, 1, 1, 1],[1, 1, 1, 0, 0, 0],[1, 1, 1, 0, 0, 1],[1, 1, 1, 0, 1, 0],[1, 1, 1, 0, 1, 1],[1, 1, 1, 1, 0, 0],[1, 1, 1, 1, 0, 1],[1, 1, 1, 1, 1, 0],[1, 1, 1, 1, 1, 1]我尝试使用 for 循环实现这一点,但没有成功。我不想要使这成为可能的算法的完整代码,但我希望在路上得到帮助。提前致谢。
查看完整描述

1 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

我想出了这个解决方案,这有点笨拙,但可能适合你的情况,评论应该解释一切:


public static void printCombinations(int R, int N) {

    // calculate the combinations

    String[][] combinations = calculateCombinations(R, N);

    // iterate over all

    for (int i = 0; i < combinations.length; i++) {

        // prints the commas at the end

        if (i != 0) {

            System.out.println(',');

        }

        // print to std out

        System.out.print(Arrays.toString(combinations[i]));

    }

    System.out.println();

}


public static String[][] calculateCombinations(int R, int N) {

    // calculate our limit

    int limit = (int) StrictMath.pow(N, R);

    // create the result array

    String[][] result = new String[limit][R];

    // iterate over all possibilities

    for (int i = 0; i < limit; i++) {

        // convert to base

        String base = Long.toString(i, N);

        // holds our temporary value

        StringBuilder intermediate = new StringBuilder(R);

        // pad the value from the start with zeroes if needed

        for (int sub = R - base.length(); sub > 0; sub--) {

            intermediate.append('0');

        }

        // append our number

        intermediate.append(base);


        // append to result

        result[i] = intermediate.toString().split("");

    }

    // return the result

    return result;

}

然后可以这样调用以漂亮地打印出来:


printCombinations(6, 2);

或者得到它的结果:


String[][] result = calculateCombinations(6, 2);

运行演示


查看完整回答
反对 回复 2022-10-20
  • 1 回答
  • 0 关注
  • 70 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信