Программа для определения количества способов достижения суммы х с использованием у чисел? - PullRequest
0 голосов
/ 29 августа 2018

Это подзадача проблемы, над которой я работаю. Человек стоит на оси х в точке 0 и получает на свой телефон строку, чтобы добраться до пункта назначения.

+ означает перемещение на 1 единицу в положительном направлении.

- означает перемещение на 1 единицу в отрицательном направлении.

Строка, отправленная ему, и строка, которую он фактически получает, искажены внешними факторами.

Строка, которую он фактически получает, содержит третий символ, который он не может прочитать, т. Е. '?'. Если он читает? он делает случайный выбор, чтобы переместиться на 1 единицу вправо или влево.

Мне нужно найти вероятность того, что успешный человек достигнет своего конечного пункта назначения с текстом, который он получил.

Например:

s1 = + - + -

s2 = + - ??

s1 оценивается в 0 (1-1 + 1-1).

s2 может иметь значения (2,0, -2,0)

Таким образом, вероятность того, что он достигнет пункта назначения, составляет 2/4 = 0,5

То, что я делал до сих пор, рассчитывает итоговый балл назначения в соответствии с s1 и временный балл в соответствии с + s anf -s в s2, а разница между ними - сумма, которую я пытаюсь достичь.

Теперь возникает вопрос: сколько способов вы можете получить сумму x, используя y 1s и -1s. И рассчитать вероятность, используя это значение, деленное на 2 ^ у.

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 голосов
/ 01 сентября 2018

сколько способов вы можете получить сумму x, используя y 1s и -1s

Сначала несколько угловых случаев: Если | x | > y есть ноль способов. Если x четное и y нечетное, или наоборот, оно также равно нулю. В противном случае вам потребуется a 1 с и b -1, с a - b = x и а + * * 1 025 * 1026 б * = у . Итак a = ( y + x ) / 2 и b = ( y - x ) / 2. Затем вы можете расположить эти a шагов в одном и b шагов в другом направлении в ( y !) / ( a ! × b !) Способами. Это число способов выбрать a элементов из y , вычисленных с использованием биномиального коэффициента, который иногда записывается yCa и произносится как « y выберите a ”. См. https://en.wikipedia.org/wiki/Combination для дальнейшего обсуждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...