Самый частый элемент - Lisp

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

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

Не могу понять,как написать программу,которая читает трехмерный массив, содержащий вещественные числа, из стандартного потока ввода, и определяет, какое число встречается в массиве чаще всего, и выводит на экран количество вхождений.

Решение задачи: «Самый частый элемент»

textual
Листинг программы
(defun task-3 (a)
 (let ((la (array-dimensions a)) (v nil) (p nil) (al nil))  
   (dotimes (i (car la) t)
     (dotimes (j (cadr la) t)
       (dotimes (k (caddr la) t)
         (setf v (aref a i j k))
         (setf p (assoc v al))
         (if (null p) (push (cons v 1) al) (push (cons v (+ 1 (cdr p))) al)))))
   (apply #'max (mapcar #'cdr al))))

Объяснение кода листинга программы

В данном коде реализован алгоритм поиска самого частого элемента в массиве.

  1. Создается функция task-3, которая принимает в качестве аргумента массив a.
  2. В блок let создаются следующие переменные:
    • la - размеры массива a.
    • v - текущий элемент массива a.
    • p - ассоциативный массив, где ключами являются элементы массива a, а значениями - их частота.
    • al - список кортежей, содержащих элементы массива a и их частоту.
  3. С помощью цикла dotimes перебираются все индексы массива a.
  4. Внутри цикла dotimes перебираются все индексы второго измерения массива a.
  5. Внутри цикла dotimes перебираются все индексы третьего измерения массива a.
  6. Элемент массива a с индексами i, j, k присваивается переменной v.
  7. Для этого элемента ищутся его предыдущие значения в переменной p. Если такого элемента нет, то создается новый кортеж (v 1) и добавляется в конец списка al. Если элемент уже есть, то к его частоте прибавляется единица и создается новый кортеж (v (+ 1 (cdr p)), который добавляется в конец списка al.
  8. После завершения третьего цикла dotimes, в переменной al будет список кортежей, содержащих элементы массива a и их частоту.
  9. С помощью функции apply и функции max находится максимальное значение в списке кортежей al.
  10. Результатом работы функции task-3 будет самый частый элемент массива a.

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


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

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

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