gpt4 book ai didi

C - 计算字符串中可能的不重复组合的数量

转载 作者:行者123 更新时间:2023-11-30 20:20:51 25 4
gpt4 key购买 nike

晚安,C 中计算最大长度为 256 的字符串中 UNIQUE 字谜词的可能性数量且不允许由相同字母引起重复的最佳方法是什么?输入只能是大写字母,并且只允许使用字母 A-Z。我陷入了程序中最坏的情况——26!一个非常大的数字,甚至超出了我的两倍。我想我在这里很迷茫,我在 C 方面不太擅长。程序只需要显示可能性的数量,而不是字谜。喜欢:

哈哈=3

房子= 120

旧 = 6

ABCDEFGHIJKLMNOPQRSTUVWXYZ = 403291461126605635584000000

非常感谢你们...我尝试了很多,但每次都失败了,我对此感到苦恼。我更接近做到这一点的方法是在 Pascal 中,但它在一些测试中也失败了,而且我无论如何也不能使用 Pascal。我在 Windows 上使用使用 GCC 编译的 CodeBlocks。

最佳答案

您应该计算给定字符串的长度除以每个字母出现次数的阶乘。

long double logFactorial (int i) {
return i < 2 ? 0.L : (logFactorial (i-1)+log(long double (i));
}
int countLetter(const char* str, char c) {
int res = 0;
while (str && *str) {
res += *str++ == c;
}
return res;
}
long double numPermutations(const char* str) {
auto res = logFactorial (strlen(str));
for (char c = 'A'; c<='Z'; c++) {
res -= logFactorial (countLetter (str,c));
}
return exp((long double)res);
}

注意!

这里有几个人说 26 的阶乘即使在 64 位整数中也无法存储,这是正确的。

因此,我将计算更改为阶乘数的对数并将其存储在 long double 中,我希望它足够精确(我认为 exp() 函数不够精确)

尽管如此,您不能将此结果用作整数值,除非您找到一种方法将其存储为 128 位或更大的整数...如果这适合您的问题,您也应该测试它。

有一种更快的方法可以通过存储 0 的结果来计算此问题的阶乘!最多26个!在大小为 [27] 的数组中。

我将留给您提出另一个问题。

关于C - 计算字符串中可能的不重复组合的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44620161/

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