Задача 2097 — Трьохзначі числа
https://www.e-olymp.com/uk/problems/2097
На заданому проміжку [A, B] виведіть у зростаючому порядку всі трьохзначні числа, у яких усі цифри різні.
Вхідні дані
У єдиному рядку два натуральних числа з вказаного проміжку. 100 ≤ A ≤ B ≤ 999.
Вихідні дані
Кожне число виводьте на новому рядку.
Вхідні дані #1
100 105
Вихідні дані #1
102
103
104
105
Джерело: Китеня 2011 м. Ковров
Розв'язання.
Перебираємо всі числа проміжку. В тестовому прикладі це буде:
100
101
102
103
104
105
Але деякі числа нам не підходять, бо мають повтори цифр. Наприклад в числі 101 дві одиниці, тобто не всі цифри різні.
Давайте переберемо всі числа проміжку, кожне з них відконвертуємо в текст, використовуючи стандартну функцію str()
Далі скористаємося функцією створення множини set()
Дана функція на основі відконвертованого в текст числа створить множину, в якій будуть елементи без повторів. Тобто дана функція створить нам множину, в якій не буде дублікатів. До речі, не гарантується, що буде збережено порядок елементів, але для нашої задачі це неважливо.
Ось приклад, що ілюструє роботу функції set()
>>> a = [1,3,5,4,3,3]
>>> a
[1, 3, 5, 4, 3, 3]
>>> b = set(a)
>>> b
{1, 3, 4, 5}
Отже, якщо в тризначному числі всі цифри різні, то довжина множини, що утворена функцією set() буде дорівнювати трьом. Ось як просто це на python:
if len(set(str(i))) == 3
Ось так просто. Зверніть увагу, що писати перебір чисел таким чином:
for i in range (a,b)
невірно, тому що останній елемент (b) в такому разі не буде перебиратися циклом.