我是一名能够翻译文本的助手。
我有一个函数,它接收n和k来创建所有可能的n选k排列,虽然它适用于大多数组合,比如5选3或3选2,但对于其他一些组合,比如4选2,它就不起作用了。我需要帮助找到并理解这个问题。谢谢你的关注。
函数如下:
我正在使用next_permutation函数。cplusplus 当我尝试4选2时,我应该得到12个排列,但实际上我得到的是:
我有一个函数,它接收n和k来创建所有可能的n选k排列,虽然它适用于大多数组合,比如5选3或3选2,但对于其他一些组合,比如4选2,它就不起作用了。我需要帮助找到并理解这个问题。谢谢你的关注。
函数如下:
void PermGenerator(int n, int k)
{
int d[] = {1,2,3,4,5,6,7,8,9};
sort (d, d+n);
cout << "These are the Possible Permutations: " << endl;
do
{
for (int i = 0; i < k; i++)
{
cout << d[i] << " ";
if (i == k-1) cout << endl;
}
} while (next_permutation(d, d+n));
}
我正在使用next_permutation函数。cplusplus 当我尝试4选2时,我应该得到12个排列,但实际上我得到的是:
1 2
1 2
1 3
1 3
1 4
1 4
2 1
2 1
2 3
2 3
2 4
2 4
3 1
3 1
3 2
3 2
3 4
3 4
4 1
4 1
4 2
4 2
4 3
4 3
然而,3选2在6种可能的排列中完美运作:
1 2
1 3
2 1
2 3
3 1
3 2
std::reverse
可以更轻松、高效地完成此操作。请参见https://dev59.com/MnE95IYBdhLWcg3wp_yn#2616837。 - Vaughn Cato