Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby中的二项系数(nCr)算法_Ruby - Fatal编程技术网

Ruby中的二项系数(nCr)算法

Ruby中的二项系数(nCr)算法,ruby,Ruby,我的任务是解决这个问题: 从五个12345中选择三个的方法有十种: 123, 124, 125, 134, 135, 145, 234, 235, 245, and 345 在组合数学中,我们使用符号,5C3=10。总的来说 nCr = n! / r!(n−r)! 其中r≤ n,n!=n×(n−1) ×…×3×2×1,和0!=1 直到n=23,一个值才超过一百万:23C10= 1144066 对于1,nCr的值有多少(不一定不同)≤ N≤ 100,, 超过一百万 我必须用Ruby提出一个算法

我的任务是解决这个问题:

从五个12345中选择三个的方法有十种:

123, 124, 125, 134, 135, 145, 234, 235, 245, and 345
在组合数学中,我们使用符号,
5C3=10
。总的来说

nCr = n! / r!(n−r)!
其中
r≤ n
n!=n×(n−1) ×…×3×2×1
,和
0!=1

直到
n=23
,一个值才超过一百万:
23C10=
1144066

对于
1,
nCr
的值有多少(不一定不同)≤ N≤ 100
,, 超过一百万


我必须用Ruby提出一个算法来解决这个问题,但我似乎不明白它是如何实现的。

这是一个project Euler问题。你需要应用帕斯卡三角形来解决这个问题。 pascal三角形是对称的,所以我们只需计算其中的一半就可以得到结果,这将使程序运行得更快

另一种方法是缓存以前计算的阶乘结果并使用它们,以避免不必要的计算过载

@@fact_table = []
@@fact_table[0] = 1;
@@fact_table[1] = 1;

for i in (2..100)
  @@fact_table[i] = i * @@fact_table[i-1]
end

def ncr(n, r)
return @@fact_table[n] / (@@fact_table[r] * @@fact_table[n-r])
end

num = 0 
for n in (1..100)
  for r in (1..n)
    if ncr(n, r) > 1000000
      num += 1
    end
  end
end

print "Count exceeding 1 million: ", num, "\n"
输出

Count exceeding 1 million: 4075

它必须是一个“聪明”的算法吗?如果不是,您总是可以对所有这些问题进行求解,并计算产生的大于一百万的解决方案的数量。不清楚您所说的
是什么意思,直到n=23,值才超过一百万:23C10=1144066。
10
来自哪里?你是说对某些人来说是
?如果是这样,你需要写出来。@sawa实际上,它的副本是从实际问题页面粘贴的:@OscarSwanros那又怎样?你是把这个问题的不清楚归咎于原著的作者吗?那里的作者对那页上的内容负责。当你在这里引用它的时候,无论它有什么问题都是你的责任。