C - 计算字符串中可能没有重复的组合数
C - Count the number of combinations possible in a string without repetitions
晚安,在 C 中计算最大长度为 256 的字符串中 UNIQUE 字谜的可能性的最佳方法是什么,而不允许由相同字母引起的重复?输入将只是大写字母,并且只允许使用字母 A-Z。我陷入了程序的最坏情况,得到了 26!一个非常大的数字,甚至超过了我的两倍。我想我在这里很迷茫,我在 C 中不是很好。该程序只需要显示可能性的数量,而不是字谜。喜欢:
哈哈=3
房子 = 120
老 = 6
ABCDEFGHIJKLMNOPQRSTUVWXYZ = 403291461126605635584000000
非常感谢你们...我尝试了很多但每次都失败了,我很苦恼。我更接近它的方式是在 Pascal 中,但它在一些测试中也失败了,而且我无论如何也不能使用 Pascal。我在使用 GCC 编译的 Windows 上使用 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 中计算最大长度为 256 的字符串中 UNIQUE 字谜的可能性的最佳方法是什么,而不允许由相同字母引起的重复?输入将只是大写字母,并且只允许使用字母 A-Z。我陷入了程序的最坏情况,得到了 26!一个非常大的数字,甚至超过了我的两倍。我想我在这里很迷茫,我在 C 中不是很好。该程序只需要显示可能性的数量,而不是字谜。喜欢:
哈哈=3
房子 = 120
老 = 6
ABCDEFGHIJKLMNOPQRSTUVWXYZ = 403291461126605635584000000
非常感谢你们...我尝试了很多但每次都失败了,我很苦恼。我更接近它的方式是在 Pascal 中,但它在一些测试中也失败了,而且我无论如何也不能使用 Pascal。我在使用 GCC 编译的 Windows 上使用 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].
的数组中我会留给你再问一个问题。