Python :: Aufgabe #292 :: Lösung #2
2 Lösungen
#292
Die n-te Zahl ermitteln
Fortgeschrittener - Python
von JKooP
- 04.10.2020 um 11:30 Uhr
Man nehme eine Zahl, die beispielsweise mit den Ziffern 245 beginnt.
Nun ist die Frage, welche ist z.B. die 12. Zahl, die ebenfalls mit 245 beginnt?
Lösung: 24500, denn
01. 245
02. 2450
03. 2451
…
11. 2459
12. 24500
Welche ist die 100. Zahl die mit 245 beginnt?
Variante 1: durch Probieren mittels einer Schleife (leicht)
Versucht man jetzt aber durch Probieren die 13000. Zahl zu ermitteln, kann das schon eine Weile dauern. Vielleicht lässt sich eine logische Folge ableiten?!
Variante 2: Berechnung der Zahl (schwieriger)
Viel Spaß
Nun ist die Frage, welche ist z.B. die 12. Zahl, die ebenfalls mit 245 beginnt?
Lösung: 24500, denn
01. 245
02. 2450
03. 2451
…
11. 2459
12. 24500
Welche ist die 100. Zahl die mit 245 beginnt?
Variante 1: durch Probieren mittels einer Schleife (leicht)
Versucht man jetzt aber durch Probieren die 13000. Zahl zu ermitteln, kann das schon eine Weile dauern. Vielleicht lässt sich eine logische Folge ableiten?!
Variante 2: Berechnung der Zahl (schwieriger)
Viel Spaß
#2
von Klaus (1960 Punkte)
- 21.12.2020 um 22:54 Uhr
Ich habe den Eindruck, man kann die Berechnungsmethode noch viel effizienter lösen. Insofern freue ich mich auf einen Blick in andere Lösungen. Immerhin scheint meine Implementierung zumindest zu funktionieren.
Python-Code
import random as rnd def loop_solution(prefix, search_index): prefix = str(prefix) actual_number = 0 correct_numbers = [] while True: actual_number += 1 if len(str(actual_number)) < len(prefix): continue if prefix == str(actual_number)[0:len(prefix)]: correct_numbers.append(actual_number) if len(correct_numbers) == search_index: return actual_number def calculate_solution(prefix, search_index): if search_index >= 111112: return(f'{prefix}{str(search_index - 111112).zfill(6)}') elif search_index >= 11112: return(f'{prefix}{str(search_index - 11112).zfill(5)}') elif search_index >= 1112: return(f'{prefix}{str(search_index - 1112).zfill(4)}') elif search_index >= 112: return(f'{prefix}{str(search_index - 112).zfill(3)}') elif search_index >= 12: return(f'{prefix}{str(search_index - 12).zfill(2)}') elif search_index >= 2: return(f'{prefix}{search_index - 2}') else: return(f'{prefix}') print('Die Lösungen von 1 bis 150\n--------------------------') for index in range(1, 151): print(f'{index:3.0f}. per Schleife: {loop_solution(245, index):6.0f} / per Berechnung: {int(calculate_solution(245, index)):6.0f}') print('\n\nDie Lösung für 10 Zufallszahlen von 1 bis 10000\n-----------------------------------------------') for index in range(10): value = rnd.randint(2, 10000) print(f'{value:5.0f}. per Schleife: {loop_solution(245, value):8.0f} / per Berechnung: {int(calculate_solution(245, value)):8.0f}') print('\n\nDie Lösung für die Zahl 13000\n-----------------------------') print(f'13000. per Schleife: {loop_solution(245, 13000):8.0f} / per Berechnung: {int(calculate_solution(245, 13000)):8.0f}')
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1