gpt4 book ai didi

c - 生成非唯一(重复)排列

转载 作者:太空宇宙 更新时间:2023-11-04 07:31:31 25 4
gpt4 key购买 nike

我用 C 编写了一个基本的排列程序。用户键入一个数字,它会打印该数字的所有排列。

基本上,它是这样工作的(主要算法是用于 find the next higher permutation 的算法):

int currentPerm = toAscending(num);
int lastPerm = toDescending(num);
int counter = 1;

printf("%d", currentPerm);

while (currentPerm != lastPerm)
{
counter++;
currentPerm = nextHigherPerm(currentPerm);
printf("%d", currentPerm);
}

但是,当输入的数字包含重复数字(重复)时,不会生成某些排列,因为它们是重复的。计数器显示的数字与预期不同 - 它不显示数字中位数的阶乘,而是显示较小的数字,仅包含唯一排列。

例如:

num = 1234567
counter = 5040 (!7 - all unique)

num = 1123456
counter = 2520

num = 1112345
counter = 840

我想让它把重复/重复的数字当作不同的来处理 - 我不想只生成唯一排列 - 而是生成所有排列,无论它们是否重复和重复。

最佳答案

嗯……那为什么不直接计算输入字符串长度的阶乘呢? ;)

关于c - 生成非唯一(重复)排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13351312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com