Напечатать в возрастающем порядке все трехзначные числа - Lisp

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

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

Напечатать в возрастающем порядке все трехзначные числа, в десятичной записи которых нет одинаковых цифр. Проблема с циклами, никак не могу разобраться

Решение задачи: «Напечатать в возрастающем порядке все трехзначные числа»

textual
Листинг программы
(defun is-good (n)
  (let ((n1 (rem n 10))
        (n2 (rem (\ n 10) 10))
        (n3 (\ n 100)))
    (not (zerop (* (- n1 n2) (- n2 n3) (- n1 n3))))))
 
(defun task (n)
  (cond ((> n 999) 'ok)
        ((is-good n) (printline n)))
  (task (+ n 1)))   
 
 
==> task
 
(task 100)
 
102
103
104
...

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

В коде две функции:

  1. Функция is-good принимает целое число и возвращает истину, если число хорошее, и ложь в противном случае. Хорошим числом называется число, для которого выполняется определенное условие. Для того чтобы число было хорошим, нужно, чтобы разность между первыми тремя цифрами числа, взятыми без остатка, и последними тремя цифрами числа, взятыми без остатка, не делилась на 3 и 5 одновременно.
  2. Функция task принимает целое число и выполняет задачу, которая заключается в том, чтобы напечатать все хорошие трехзначные числа в возрастающем порядке. Для этого используется рекурсия. Если число больше 999, то ничего не делается, и функция возвращает ok. Если число хорошее, то оно печатается, и функция вызывает саму себя, увеличив число на единицу.

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


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

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

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