Написать программу, определяющую в одномерном числовом массиве такую сумму любых пяти элементов, которая наиболее близка к заданному числу - Lisp
Формулировка задачи:
Задача:
Написать программу, определяющую в одномерном числовом массиве такую сумму любых пяти элементов, которая наиболее близка к заданному числу, вводящемуся с клавиатуры.
Решение задачи: «Написать программу, определяющую в одномерном числовом массиве такую сумму любых пяти элементов, которая наиболее близка к заданному числу»
textual
Листинг программы
(defun comb (lst nn k) (let ((cmb (reverse (mklist1 k))) (p k) (z 0) (n (length lst))(mi nil) (cmi nil)) (loop (when (< p 1) (return (list cmi (mapcar #'(lambda (x) (getel lst x)) cmi)))) (setq z (abs (- nn (apply '+ (mapcar #'(lambda (x) (getel lst x)) cmb))))) (if (null mi) (setq mi z cmi (copy cmb)) (when (< z mi) (setq mi z cmi (copy cmb)))) (if (= (getel cmb k) n) (setq p (1- p)) (setq p k)) (when (>= p 1) (iter (for i from k to p by -1) (putel cmb i (+ (getel cmb p) 1 i (- p)))))))) ==> comb (comb '(11 22 33 1 2 3 -5 -4 -3 -2) 50 5) ;; список номеров и список самих чисел, сумма которых наиболее ;; близка к заданной: ==> ((1 3 4 5 6) (11 33 1 2 3)) (comb '(11 22 33 1 2 3 -5 -4 -3 -2) 51 5) ==> ((2 3 4 9 10) (22 33 1 -3 -2))
Объяснение кода листинга программы
Вероятно, этот код на языке Lisp решает задачу поиска суммы пяти элементов в одномерном массиве, которая ближе всего к заданному числу. Вот список номеров и самих чисел, сумма которых наиболее близка к заданной:
- (1 3 4 5 6) (11 33 1 2 3)
- ((2 3 4 9 10) (22 33 1 -3 -2))