Для заданной матрицы В размера 5*5 найти такие k, для которых k-я строка матрицы совпадает с k-м столбцом - Lisp

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

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

Для заданной матрицы В размера 5*5 найти такие k, для которых k-я строка матрицы совпадает с k-м столбцом.

Решение задачи: «Для заданной матрицы В размера 5*5 найти такие k, для которых k-я строка матрицы совпадает с k-м столбцом»

textual
Листинг программы
(defun task (matr)
  (let ((matrt (apply 'mapcar (cons 'list matr)))
        (res nil)
        (n   (length matr)))
   (dotimes (i n res)
     (dotimes (j n nil)
       (when (equal (nth i matr) (nth j matrt)) (push (list i j) res))))))
    
==> task
 
(task '((1 2 3 4) (2 6 5 8) (3 10 11 12) (4 14 15 16)))
 
==> ((0 0))
 
(task '((0 0 0 0) (2 6 0 8) (3 10 0 12) (4 14 0 16)))
 
==> ((0 2))

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

В коде определена функция task, которая принимает в качестве аргумента матрицу matr. Внутри функции создаются следующие переменные: — matrt — результат применения функции mapcar к матрице matr, в которой каждый элемент матрицы преобразуется в список из одного элемента; — res — результат итерации по матрице matrt; — n — количество строк матрицы matr. Далее выполняется два вложенных цикла: — внешний цикл dotimes с переменной i от 0 до n, который выполняет следующие действия: — внутренний цикл dotimes с переменной j от 0 до n, который ищет совпадения элементов строк и столбцов матрицы matr и matrt соответственно; — если найдено совпадение, то в переменную res добавляется список с номерами i и j. В конце выполнения функции task возвращается список res. Пример выполнения функции task для матрицы '((1 2 3 4) (2 6 5 8) (3 10 11 12) (4 14 15 16)) покажет, что совпадения найдены для строк 0 и 2, то есть будет возвращён список ((0 2)). Пример выполнения функции task для матрицы '((0 0 0 0) (2 6 0 8) (3 10 0 12) (4 14 0 16)) покажет, что совпадения найдены для строки 0, то есть будет возвращён список ((0 0)).

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


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

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

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