[英]Program to find the number of ways of achieving a sum x using y numbers?
这是我正在处理的一个问题的子问题。 一个人站在 x 轴 0 处,并在他的手机上收到一条到达目的地的字符串。
+ 表示正向移动 1 个单位。
- 表示向负方向移动 1 个单位。
发送给他的字符串和他实际收到的字符串被外部因素扭曲了。
他实际收到的字符串包含他无法读取的第三个字符,即“?”。 如果他读 ? 他随机选择向右或向左移动 1 个单位。
我必须找出成功人士带着收到的短信到达最终目的地的概率。
例如:
s1 = +-+-
s2 = +-??
s1 的计算结果为 0 (1-1+1-1)。
s2 可以有值 (2,0,-2,0)
所以他到达目的地的概率是 2/4 = 0.5
到目前为止,我所做的是根据 s1 计算最终目标分数,并根据 s2 中的 +s anf -s 计算临时分数,两者之间的差异是我试图达到的总和。
现在的问题本质上变成了使用 y 1s 和 -1s 有多少种方法可以实现 x 的总和。 并使用该值除以 2^y 计算概率。
private static double calculateProb(String s1, String s2) {
// TODO Auto-generated method stub
char[] c1 = s1.toCharArray();
char[] c2 = s2.toCharArray();
int num_q = 0, temp = 0;
int score = 0;
for(char c: c1){
if(c=='+')
score+=1;
else if(c=='-')
score-=1;
}
for(char c : c2){
if(c=='+')
temp+=1;
else if(c=='-')
temp-=1;
else if(c=='?')
num_q++;
}
return 0.0;
}
这是我到目前为止。
有多少种方法可以使用 y 1s 和 -1s 获得 x 的总和
首先是一些极端情况:如果 | × | > y有零个方法。 如果x是偶数而y是奇数,反之亦然,它也为零。 否则,您需要a 1s 和b −1s,其中a − b = x和a + b = y 。 所以a =( y + x )/2 和b =( y − x )/2。 然后,您可以以 ( y !) / ( a ! × b !) 方式在一个方向上安排这些a步,并在另一个方向上安排b步。 这是方式选择一个元素输出Y的数目,使用二项式系数有时写作YCA和显着的“Y选择”计算的。 有关进一步讨论,请参阅https://en.wikipedia.org/wiki/Combination 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.