0198 - Submultimi

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Cerinta

Se citește un număr natural nenul n. Să se afişeze, în ordine lexicografică, toate submulțimile nevide ale mulţimii {1,2,..,n}.

Date de intrare

Fişierul de intrare submultimiin.txt conţine pe prima linie numărul n.

Date de iesire

Fişierul de ieşire submultimiout.txt va conţine pe fiecare linie câte o submulțime, elementele unei submulțimi fiind separate printr-un spațiu.

Restrictii si precizari

  • 1 ⩽ n ⩽ 10

Exemplul 1

submultimiin.txt
4
submultimiout.txt
Datele introduse corespund restrictiilor impuse
1
1 2
1 2 3
1 2 3 4
1 2 4
1 3
1 3 4
1 4
2
2 3
2 3 4
2 4
3
3 4
4

Exemplul 2

submultimiin.txt
19736
Datele introduse nu corespund restrictiilor impuse


Rezolvare

def verifica_restrictii(n):
    return 1 <= n <= 10

def genereaza_submultimi(n):
    submultimi = []

    def backtrack(start, current):
        submultimi.append(current[:])

        for i in range(start, n + 1):
            current.append(i)
            backtrack(i + 1, current)
            current.pop()

    backtrack(1, [])
    return submultimi[1:]  # Excludem mulțimea vidă

# Citire din fișierul de intrare
with open('submultimiin.txt', 'r') as file:
    n = int(file.readline())

# Verificare restricții
if verifica_restrictii(n):
    # Generare submulțimi
    rezultat = genereaza_submultimi(n)

    # Scriere în fișierul de ieșire
    with open('submultimiout.txt', 'w') as file_out:
        for subset in rezultat:
            file_out.write(" ".join(map(str, subset)) + "\n")
else:
    print("Date de intrare nevalide.")