程序找到使用y个数求和x的方式的数量?

时间:2018-08-28 21:28:20

标签: java math

这是我正在处理的问题的子问题。 一个人站在0的x轴上,并在手机上收到一条字符串以到达目的地。

+表示正向移动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;
}

这是我到目前为止所拥有的。

1 个答案:

答案 0 :(得分:0)

  

用y 1s和-1s可以有多少种方法求和x

首先出现一些极端情况:如果| 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 !)。这是从 y 中选择 a 元素的方法的数量,该方法使用二项式系数计算,该系数有时写为 yCa ,发音为“ y 选择 a ”。参见https://en.wikipedia.org/wiki/Combination进行进一步的讨论。