Показать сообщение отдельно
  #18 (permalink)  
Старый 14.05.2019, 18:57
Интересующийся
Отправить личное сообщение для ProgYoung Посмотреть профиль Найти все сообщения от ProgYoung
 
Регистрация: 08.05.2019
Сообщений: 25

Alexandroppolus,
почему первое слагаемое от f, а не от 1? Еще у меня так и не выводит ответ, хотя вроде все правильно (я сохраняю текстовый документ, как .html и открываю в гугле):

<!DOCTYPE html>
<html>
<head>
 <META http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
 <title></title>
</head>
<body>

<p>Введите число N - сумма чисел в нечетных разрядах:</p>
<input type="text" id="n" size="10" maxlength="15"/>
<p>Введите число M (M-значные числа):</p>
<input type="text" id="m" size="10" maxlength="15"/>
<p id="solution">Решение</p>
<p><textarea id="solve" rows="15" cols="40"></textarea></p>

<script type="text/javascript">

var calculation = function() {
    function sumCount(f, m, n, saved) {
        if (m < 2) {
            return n < 10 && n >= f ? 1 : 0;
        }
        if (n < 1) {
            return 1 - f;
        }
        if (saved[m][n] >= 0) {
            return saved[m][n];
        }
        var c = 0, last = Math.min(n, 9);
        for (var i = f; i <= last; ++i) {
            c += sumCount(0, m - 1, n - i, saved);
        }
        return saved[m][n] = c;
    }

    function calc(M, N) {
        var saved = [];
        var digs = Math.ceil(M / 2);
        for (var i = 0; i <= digs; ++i) {
            saved[i] = new Array(N + 1);
            for (var j = 0; j <= N; ++j) {
                saved[i][j] = -1;
            }
        }
        var count = sumCount(M % 2, digs, N, saved);
        var suf = Array(Math.ceil(M / 2)).join('0');
        var k = M % 2 ? 1 : 9;
        
        return count ? (count * k) + suf : '0';
    }

    return calc;
};

 document.getElementById("solution").onclick = function() {

   var M = parseInt(document.getElementById("id_m").value, 10);
   var N = parseInt(document.getElementById("id_n").value, 10);

   document.getElementById("solve").innerHTML = calculation(M, N);

 }
</script>
</body>
</html>

Последний раз редактировалось ProgYoung, 14.05.2019 в 19:11.
Ответить с цитированием