ilość cyfr składających się z różnych liczb w określonym przedziale

0

Dla zadanego przedziału określ ile liczb w tym przedziale składa się wyłącznie z różnych cyfr, tzn. w ich zapisie cyfry się nie powtarzają. Np. liczba 87 składa się z różnych cyfr, natomiast liczba 100 już nie, ponieważ cyfra 0 się powtarza 2 razy
Wejście:
a := 87
b := 104
wynik:
14
Czy pomoże mi ktoś z implementacją tego zadania w Pythonie 3 ?
Rozumiem iż muszę wczytać dwie cyfry (jako przedział cyfr), następnie w tym przedziale liczb sprawdzić które cyfry się powtarzają w obrębie jednej cyfry,

Z przedziału
87,104
następujące liczby składają się wyłącznie z różnych cyfr:
87,89,90,91,92,93,94,95,96,97,98,102,103,10487,89,90,91,92,93,94,95,96,97,98,102,103,104

a = int(input('podaj a: '))
b = int(input('podaj b: '))
for i in range(a,b+1):
    print(i)
4

na szybko:

wsad = list(range(87,105))
different = [x for x in wsad if len(set(str(x))) == len(str(x))]
0

Rozumiem iż muszę wczytać dwie cyfry (jako przedział cyfr), następnie w tym przedziale liczb sprawdzić które cyfry się powtarzają w obrębie jednej cyfry,

Nie, nikt Ci nic takiego nie mówił. Nawet w przykładzie masz liczbę trzycyfrową.

0

@Althorion: przepraszam chodziło mi o to że muszę wczytać dwie liczby (np 10 oraz 50) i z przedziału pomiędzy nimi wypisać ilość liczb które zawierają różne cyfry, znaczy tak to rozumiem

0

Których wszystkie cyfry są różne (tzn. 123 jest OK, ale 122 czy 111 już nie), czy te, które zawierają przynajmniej dwie różne cyfry (tzn. 123 oraz 122 są OK, ale 111 nie)?

0

okej są te które mają każdą cyfrę różną, to znaczy:
87 ok,
88 nie,
89 ok,
90 ok,
99 nie,
100 nie,
101 nie,
102 ok,
103 ok,

3
mikko napisał(a):

Rozumiem iż muszę wczytać dwie cyfry (jako przedział cyfr), następnie w tym przedziale liczb sprawdzić które cyfry się powtarzają w obrębie jednej cyfry,

Nie wiem czy ktoś już ci to napisał, ale nie widzisz różnicy między cyfrą a liczbą co bardzo utrudnia robienie takich zadań. W uproszczeniu cyfra to litera a liczba to wyraz

0

znam różnicę :D, w pierwszym poście mi się pomyliło, sprostowałem to później, lecz nie mogę edytować pierwszego postu

1

OK. Czy rozumiesz odpowiedź leidiego12 wyżej, a jeśli nie, to czego konkretnie w niej nie rozumiesz?

W szczególności:

  1. Czy wiesz, co to jest set w Pythonie?
  2. Czy wiesz, co robi funkcja str w Pythonie? Czy umiesz sobie wyobrazić, jaki będzie rezultat str(101)?
  3. Czy umiesz sobie wyobrazić, jaki będzie efekt połączenia dwójki z jedynką, tzn. jaki będzie rezultat set(str(101))?
  4. Czy wiesz, co robi funkcja len w Pythonie?
  5. Czy umiesz sobie wyobrazić, jaki będzie efekt połączenia dwójki z czwórką, tzn. jaki będzie rezultat len(str(101))?
  6. Czy umiesz sobie wyobrazić, jaki będzie efekt połączenia trójki z czwórką, tzn. jaki będzie rezultat len(set(str(101)))?
  7. Czy umiesz wykorzystać połączyć piątkę z szóstką i wykorzystać to do rozwiązania zadania? Jeśli nie, to czego Ci brakuje?
2
ledi12 napisał(a):

na szybko:

wsad = list(range(87,105))
different = [x for x in wsad if len(set(str(x))) == len(str(x))]

Przecież to jest atak brute force na zupełnie niewinne i bezbronne liczby ;-P

I bez sensu w tym przypadku jest robienie listy z range, tylko pamięć i czas procesora marnuje, a samo range prawie nie zajmuje pamięci.

A jak by tam był w przyszłości tryliard?
Wiesz, ile by to zajęło pamięci i czasu?

1 użytkowników online, w tym zalogowanych: 0, gości: 1