【问题标题】:Program for permutation and combination yields an unexpected output置换和组合程序产生了意想不到的输出
【发布时间】:2016-02-01 13:31:00
【问题描述】:

在思考了很长时间如何制作一个从给定输入数组中输出所有可能组合的 Java 程序后,我终于想到了结合递归和迭代来实现。

我的代码输入一个 char 数组 {a,b,c} 并且应该给出所有可能的长度为 3 的数组的输出。

我的代码是-

public class Brute {

    char[] val = new char[] { 'a', 'b', 'c' };

    void work(char arr[], int i) {
        for (int j = 0; j <= 2; j++) {
            if (i <= 2) {
                arr[i] = val[j];
            }
            while (i <= 2) {
                i = i + 1;
                if (i <= 2) {
                    work(arr, i);
                    System.out.println(new String(arr));
                }
            }
        }
    }

    public static void main(String args[]) {
        Brute b = new Brute();
        char arr[] = new char[] { 'p', 'q', 'r' };
        b.work(arr, 0);

    }

}

输出是:

aaa
aaa
aaa

我不明白为什么它给了我这个输出而不是所有组合。

【问题讨论】:

  • 为什么要将arr初始化为{ 'p', 'q', 'r' },因为您要置换的数组实际上是{ 'a', 'b', 'c' }
  • 仅用于调试目的,以便我知道 arr[] 实际上正在被修改。

标签: java arrays permutation combinatorics


【解决方案1】:

问题在于,i 的值始终保留为 3,而不是将 i 的值重新初始化为 0,并且 i 的递增值(即 3)被传递给进一步的递归调用。

【讨论】:

    猜你喜欢
    • 2016-06-20
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 2021-09-25
    • 1970-01-01
    相关资源
    最近更新 更多