3247 - subimp1

De la Universitas MediaWiki

Cerința

Se citește un număr natural n. Afișați în ordine lexicografică toate submulțimile mulțimii {1, 2, ..., n} care sunt formate dintr-un număr impar de elemente.

Date de intrare

Programul citește de la tastatură numărul n.

Date de ieșire

Programul va afișa pe ecran submulțimile cerute, câte una pe fiecare rand și având elementele separate prin câte un spaţiu. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul "Nu corespunde restricțiilor".

Restricții și precizări

  • 1 ≤ n ≤ 19

Exemplul 1

Intrare

4

Ieșire

1 
1 2 3 
1 2 4 
1 3 4 
2 
2 3 4 
3 
4

Exemplul 2

Intrare

66

consola

Nu corespunde restricțiilor

Rezolvare

def verifica_restricții(n):
    return 1 <= n <= 19

def generare_submultimi(curent, start, end, rezultat):
    if start > end:
        return

    for i in range(start, end + 1):
        curent.append(i)
        rezultat.append(list(curent))
        generare_submultimi(curent, i + 1, end, rezultat)
        curent.pop()

def afisare_submultimi_impare(n):
    # Verificare restricții folosind funcția separată
    if verifica_restricții(n):
        submultimi = []
        generare_submultimi([], 1, n, submultimi)

        print("Submulțimile cu un număr impar de elemente:")
        for submultime in submultimi:
            if len(submultime) % 2 == 1:
                print(*submultime)
    else:
        print("Nu corespunde restricțiilor.")

# Citirea datelor de intrare
try:
    n = int(input("Introduceți un număr natural n: "))
    afisare_submultimi_impare(n)
except ValueError:
    print("Introduceți un număr valid.")