Подсчитать количество N-значных чисел - Pascal
Формулировка задачи:
Составить алгоритм, подсчитывающий количество всех N-значных
чисел, сумма цифр которых равна данному числу N.
Решение задачи: «Подсчитать количество N-значных чисел»
textual
Листинг программы
const maxValue = 25; var tbl : array[0 .. maxValue, 0 .. maxValue] of qword; function CR(n : integer; s : integer) : qword; var R : qword; i : integer; begin if n = 0 then exit(Ord(s = 0)); R := 0; if(tbl[n, s] <> qword(-1)) then exit(tbl[n, s]); for i := 0 to 9 do if s - i >= 0 then Inc(R, CR(Pred(n), s - i)); tbl[n, s] := R; result := R; end; function FC(n : integer; s : integer) : qword; var R : qword; i : integer; begin fillqword(tbl, sizeof(tbl) div sizeof(qword), qword(-1)); R := 0; for i := 1 to 9 do if s - i >= 0 then Inc(R, CR(Pred(n), s - i)); result := R; end; var n : integer; begin write('n = '); readln(n); writeln('result: ', FC(n, n)); end.
Объяснение кода листинга программы
- В первой функции
CR
мы используем массивtbl
размером от 0 доmaxValue
в обоих направлениях для хранения результатов. Если значениеtbl[n, s]
не равноqword(-1)
, то оно уже было учтено, иначе мы добавляем его вR
. Мы также используем циклfor
для увеличенияR
на результат вызова функцииCR
для предыдущего значенияn
, уменьшенного наi
. В конце мы обновляем значениеtbl[n, s]
наR
. - Во второй функции
FC
мы сначала заполняем массивtbl
значениями-1
, используя функциюfillqword
. Затем мы инициализируемR
значением0
. Затем мы используем тот же циклfor
, что и в первой функции, но вместо вызова функцииCR
мы вызываем функциюFC
для предыдущего значенияn
, уменьшенного наi
. В конце мы обновляем значениеtbl[n, n]
наR
. - В основной части программы мы считываем значение
n
с помощью функцииreadln
. Затем мы вызываем функциюFC(n, n)
и выводим результат.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д