Задачка на посчитать - Lisp

Узнай цену своей работы

Формулировка задачи:

Сегодня сын придумал задачку: генератор случайных чисел выдает натуральные числа в диапазоне от a до b включительно, с равной вероятностью выдачи каждого значения. Какова вероятность, что сумма n сгенерированных чисел будет равна s? ЗЫ мы ее решили конечно, кота потом покажу, если будет интерес.

Решение задачи: «Задачка на посчитать»

textual
Листинг программы
(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.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.917 из 5
Похожие ответы