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

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

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

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

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

textual
Листинг программы
  1. (defun is-good (n)
  2.   (let ((n1 (rem n 10))
  3.         (n2 (rem (\ n 10) 10))
  4.         (n3 (\ n 100)))
  5.     (not (zerop (* (- n1 n2) (- n2 n3) (- n1 n3))))))
  6.  
  7. (defun task (n)
  8.   (cond ((> n 999) 'ok)
  9.         ((is-good n) (printline n)))
  10.   (task (+ n 1)))  
  11.  
  12.  
  13. ==> task
  14.  
  15. (task 100)
  16.  
  17. 102
  18. 103
  19. 104
  20. ...

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

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

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

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


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

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

13   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы