永乐国际最新网址 >娱乐 >解决编程中的数学问题! “对滴”问题解说 >

解决编程中的数学问题! “对滴”问题解说

2019-09-09 07:22:01 来源:工人日报

  

审查问题

设n是一个自然数。 有2组n卡,写有1到1个自然数。

将这些2n卡很好地混合,并给A和B两张牌。

如果匹配,A和B会弃掉他们的两张牌。

设F(n,k)是丢弃所有丢弃的卡后A有k卡的概率。

例如,F(1,0)= 0,F(1,1)= 1,F(2,0)= 1/3,F(2,1)= 0,F(2,2)= 2/3, F(4,2)= 24/35。

根据标准输入,自然数n和k(1 k k n n 100 100)由半宽空间定界符给出。
编写一个程序, 将106×F(n,k)的整数部分的值输出标准输出。

政策:在开始时修复剩余的卡数

有多种方法可以确定概率。 在这里,我们将介绍其中一个。 在发给A的牌中,我们首先确定将持有的牌数,确定概率,然后为所有可能的组合添加概率。

首先,确定A中可以随身携带的第1张到第n张牌的数量。 为了清楚起见,我们假设第1张到第k张牌仍在手边。 随后的(k + 1)到第n张卡被丢弃。

那么,为了做到这一点,每张卡上的数字必须做什么? 下面,以n = 13和k = 5为例,我们计算出第1至第5件仍在手边而第6至第13件被丢弃的概率。

首先,关于第一件。 为了掌握这个号码,这个号码和一张牌必须发给B. 这样做的概率是13/25。

解决编程中的数学问题! “对滴”问题解说

接下来是第二个。 与第一张卡一样,具有此号码和一对的卡必须发给B. 满足第一个条件时这样做的概率是12/23。

解决编程中的数学问题! “对滴”问题解说

之后,以相同的方式计算第三,第四和第五图像的概率为11 / 21,10 / 19和9/17。

接下来是第六部分。 从这里开始,我们将考虑被扔掉的可能性。 为了丢弃这张卡,这个号码和一对卡必须发给同一张A. 这样做的概率是7/15。

解决编程中的数学问题! “对滴”问题解说

至于第七张牌,与第六张牌一样,这个号码和一张牌必须发给A. 这样做的概率是5/13。 (如果7日有▲,请考虑第8个。)

解决编程中的数学问题! “对滴”问题解说

之后,以相同的方式将第八和第九图像的概率计算为3/11和1/9。

所有上述概率的乘积是卡将保留在第一个固定组合中的概率。

最后,添加所有可能组合的概率。 所有可能的组合都是12C5,所有这些组合具有相同的概率。 因此,要寻求的答案如下。

解决编程中的数学问题! “对滴”问题解说

履行

如果你能做到这一点,让我们考虑一般表格,然后把它变成代码。 仔细观察上面的等式,在上半部分,最好将分数分子减1,分母减2。 在下半部分,将分母和分子减少两个似乎更好。 按定义计算nCk是安全的。

代码示例(Python)如下所示。 如果n和k之间的差为奇数,则返回0。

def f(n,k):
if(nk)%2!= 0:返回0.0
回答,p,q = 1.0,n + 1,2 * n + 1
对于范围内的i(k):
p,q = p-1,q-2
回答=回答* p / q
for i in range((nk)/ 2):
p,q = p-2,q-2
回答=回答* p / q
对于范围内的i(k):
answer = answer *(ni)/(i + 1)
回答

n,k = map(int,raw_input()。split())
print int(1000000 * f(n,k))

每个人的代码

以下概述了使该代码公开的该问题的挑战者的代码。 (我们会随时添加。)请检查一下。

来自CodeIQ管理办公室

谢谢你,Kawazoe先生!
目前,Kawazoe的最新一期正在发行。
请务必尝试!

(责任编辑:朱曩退)
  • 热图推荐
  • 今日热点