C++:递归计算数字 0 - 9 的所有排列

标签 c++ permutation

我有一个家庭作业,其中一部分要求是递归计算整数 0 - 9 的所有排列。教授实际上给了我们这部分问题的算法。我已经完成了剩余的作业,但我无法使置换函数正常工作……我正在完全按照作业信息中显示的方式实现它。但是,当我运行它时,每个排列都会重复多次(而且我不确定我是否得到了所有正确的排列。)

我认为他一定是在作业说明上弄错了。我已经为此工作了几个小时,但似乎无法弄清楚我哪里出错了。谁能帮我指出正确的方向?

这是当前代码:

void permute(int v[], int curr) {
    for (int i = curr; i < MAX; i++) {
        swap(v[i], v[curr]);
        permute(v, curr + 1);
        swap(v[curr], v[i]);
    }
}

编辑:实际上,在发布这个之后我意识到它与交换有关,对吧?因为现在 i 和 curr 是一样的,所以我要交换相同的数字。嗯,应该是swap(v[i], v[curr+1])吗?

最佳答案

将我的评论 [这似乎解决了 OP 的问题] 作为答案:

(1) 你可能想在达到最大值时打印你的数组:

if (curr == MAX) //print array

(2) 你可能想计算你得到的排列数,你可以通过一个static int [或一个全局变量,或一个额外的参数int& count] - 每当 curr == MAX [连同打印] 时增加它。

关于C++:递归计算数字 0 - 9 的所有排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9853718/

相关文章:

arrays - 删除作为 Julia 中另一个数组排列的数组

c++ - 如何使用线程同时下载和转换二进制文件?

c++ - 'using' 语句用 g++ 编译,用 clang 编译失败

java - 找出所有组合和排列 - Java

algorithm - 通过选择 A 中的一个集合,然后反转该集合并将该集合插入到 A 的开头,将排列序列 A 转换为 B

java - 无法从 String 转换为 Int

c++ - 检查无用包含文件的工具是什么?(c++)

c++ - 我该如何解决? libc++abi.dylib:以 std::invalid_argument 类型的未捕获异常终止:stoi:无转换

c++ - OpenGL(使用 SOIL)总是加载相同的图像

python - 使用 Factoradic 系统允许重复时查找第 K 个字典排列