C – 计算一系列数字组合的简单表达式?

真的是一个模糊的陈述(对我来说)

要计算的基本表达式是什么:

  • “n个事物的组合数量,每次k为整数”

编辑:更多澄清:“例如,a,b,c,d一次采取三个项目的组合是abc,abd,acd和bcd。换句话说,总共有四种不同的组合四件事“一次三个”。“

我正在学习一门非入门级的C课,同时试图完成我的数学要求以转学为CS学位。 到目前为止,我的所有工作都获得了很高的分数,但是当更高级别的数学出现时,我真的陷入困境。 但我离题了……

对于n ,数字的范围是1-10,而k的范围是1-4。

以下是我收到的唯一参考资料,这是我的头脑。

http://www.themathpage.com/aPreCalc/permutations-combinations-2.htm

基本表达式是n!/(k!(nk)!)。 计算这个的有效方法是使用pascal三角形的2D DP表。

页面上的关键表达式是:

  • n C k = n! ÷((n – k)!k!)

这是“一次取k个 n个组合的数量”的简单表达式。 术语n C k是数学家写’一次取k个 n个组合的数量’的方式。 右边的表达式是一种简洁,准确,简单的计算正确值的方法。 它预先知道你知道n! 因子n是因子n ,并且’因子n ‘表示1和n之间的每个数相乘。

请注意, n! 非常快速地变得非常大,所以天真的算法可以工作到大约n = 12但是远远超出这个并且你必须非常小心。

  • 0! = 1
  • 1! = 1
  • 2! = 2
  • 3! = 6
  • 4! = 24
  • 5! = 120
  • 6! = 720
  • 7! = 5040
  • 8! = 40320
  • 9! = 362880
  • 10! = 3628800
  • 11! = 39916800
  • 12! = 479001600
  • 13! = 6227020800

注意13! 太大了,不适合32位无符号整数,21! 太大了,不适合64位无符号整数,35! 太大了,不适合128位无符号整数(如果你能找到一台具有这种类型的计算机)。

如果你还是无法应付,那么你将在转学时遇到问题; 这不是很复杂的数学。