Задачка на посчитать - Lisp
Формулировка задачи:
Решение задачи: «Задачка на посчитать»
(defun ver (n s a b) (let ((arr (make-array (list (1+ n) (1+ s)) :initial-element 0))) (setf (aref arr 0 0) 1) (do ((nn 1 (1+ nn))) ((> nn n) (/ (aref arr n s) (expt (1+ (- b a)) n))) (do ((ss 1 (1+ ss))) ((> ss s)) (let ((sum 0)) (do ((c a (1+ c))) ((> c b)) (when (<= c ss) (incf sum (aref arr (1- nn) (- ss c))) )) (setf (aref arr nn ss) sum) )))))
Объяснение кода листинга программы
В данном коде определенная функция ver
принимает три аргумента n
, s
и a
.
Внутри функции создается массив arr
с размером, равным сумме n
и s
, и начальным элементом 0.
Затем, в массиве arr
инициализируется первый элемент, который присваивается значение 1.
Далее, в цикле, который идет от 1 до n
, выполняется следующее действие:
Если значение nn
меньше n
, то выполняется внутренний цикл, который идет от 1 до s
.
Внутри внутреннего цикла, инициализируется переменная sum
равной 0.
Затем, в цикле, который идет от a
до ss
, выполняется следующее действие:
Если значение c
меньше или равно ss
, то к переменной sum
прибавляется значение элемента массива arr
, который находится по индексам 1- nn
и ss- c
.
После выполнения внутреннего цикла, значение элемента массива arr
, который находится по индексам n
и s
, присваивается значение переменной sum
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д