Python :: Aufgabe #303 :: Lösung #1

5 Lösungen Lösungen öffentlich
#303

Zielwertsuche in einem sortierten Array

Fortgeschrittener - Python von JKooP - 21.11.2020 um 09:10 Uhr
Aufgabe 1 (leicht)
In einem beliebig großen sortieren Array soll das erste Vorkommen desjenigen Zahlenpaares per Index ausgegeben werden, bei dem die Summe dem gesuchten Zielwert entspricht.
Dabei kommt jede Zahl nur einmal im Array vor.

arr = [3, 4, 15, 22]
target = 7
Index = [0, 1] (3+4)

arr = [1, 3, 4, 6]
target = 8
Index = [0, 0] oder NULL/Nothing (keine Lösung)

Aufgabe 2 (mittel)
Wie Aufgabe 1, jedoch können Zahlen doppelt vorkommen.

arr = [4, 4, 5, 6]
target = 8
Index = [0, 1] (4+4)

Aufagbe 3 (schwer)
In einem beliebig großen sortieren Array sollen alle Vorkommen derjenigen Zahlenpaare per Indizes ausgegeben werden, bei denen die Summen dem gesuchten Zielwert entsprechen. Dabei können alle Zahlen mehrfach vorkommen.

arr = [1, 3, 4, 6]
target = 7
Indizes = [0, 3] (1+6), [1, 2] (3+4)

Noch ein wenig schwieriger:
arr = [4, 4, 4, 5, 6]
target = 8
Indizes = [0, 1] (4+4), [0, 2] (4 + 4), [1, 2] (4 + 4)

Für alle Aufgaben gilt:
Dopplungen wie [1, 3] und [3, 1] gelten als gleichwertig und sollen nicht ausgegeben werden.

Viel Spaß
#1
1x
vote_ok
von Klaus (1960 Punkte) - 30.11.2020 um 19:34 Uhr
Quellcode ausblenden Python-Code
test_data = [
    ([3, 4, 15, 22], 7),
    ([1, 3, 4, 6], 8),
    ([4, 4, 5, 6], 8),
    ([1, 3, 4, 6], 7),
    ([4, 4, 4, 5, 6], 8)
]

def search_target(array, target):
    solution = []
    for index1 in range(len(array)):
        for index2 in range(index1 + 1, len(array)):
            if array[index1] + array[index2] == target:
                solution.append((index1, index2))
    print(f'arr = {array}')
    print(f'target = {target}')
    if solution:
        print(f'Index = {solution}\n')
    else:
        print(f'No Solution\n')

for array, target in test_data:
    search_target(array, target)

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
1988080

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.