Напечатать в возрастающем порядке все трехзначные числа - 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
. Если число хорошее, то оно печатается, и функция вызывает саму себя, увеличив число на единицу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д