Написать программу, определяющую в одномерном числовом массиве такую сумму любых пяти элементов, которая наиболее близка к заданному числу - 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. (1 3 4 5 6) (11 33 1 2 3)
  2. ((2 3 4 9 10) (22 33 1 -3 -2))

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

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