Напечатать в возрастающем порядке все трехзначные числа - 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 ...
Объяснение кода листинга программы
В коде две функции:
- Функция
is-good
принимает целое число и возвращает истину, если число хорошее, и ложь в противном случае. Хорошим числом называется число, для которого выполняется определенное условие. Для того чтобы число было хорошим, нужно, чтобы разность между первыми тремя цифрами числа, взятыми без остатка, и последними тремя цифрами числа, взятыми без остатка, не делилась на 3 и 5 одновременно. - Функция
task
принимает целое число и выполняет задачу, которая заключается в том, чтобы напечатать все хорошие трехзначные числа в возрастающем порядке. Для этого используется рекурсия. Если число больше 999, то ничего не делается, и функция возвращаетok
. Если число хорошее, то оно печатается, и функция вызывает саму себя, увеличив число на единицу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д