Задача, що легко розв’язується з використанням множини (set)

Надрукувати

Задача 2097 — Трьохзначі числа

 https://www.e-olymp.com/uk/problems/2097

 

На заданому проміжку [AB] виведіть у зростаючому порядку всі трьохзначні числа, у яких усі цифри різні.

Вхідні дані

У єдиному рядку два натуральних числа з вказаного проміжку. 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) в такому разі не буде перебиратися циклом.