1286 - submultimi1: Difference between revisions

From Bitnami MediaWiki
No edit summary
 
Line 43: Line 43:
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python3" line="1">
<syntaxhighlight lang="python3" line="1">
def generare_submultimi(n, subset, index):
def verifica_restrictii(n):
     if index == n + 1:
     return 1 <= n <= 10
        if len(subset) > 0:
            print(" ".join(map(str, subset)))
        return


    # Includem elementul la index în submulțime
def genereaza_submultimi(n):
    if len(subset) == 0 or abs(subset[-1] - index) > 1:
    submultimi = []
        generare_submultimi(n, subset + [index], index + 1)


     # Nu includem elementul la index în submulțime
     def backtrack(start, current):
    generare_submultimi(n, subset, index + 1)
        submultimi.append(current[:])


# Citire date de intrare
        for i in range(start, n + 1):
with open("submultimi1.txt", "r") as file:
            if not current or abs(current[-1] - i) > 1:
     n = int(file.readline().strip())
                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('submultimi1in.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('submultimi1out.txt', 'w') as file_out:
        for subset in rezultat:
            file_out.write(" ".join(map(str, subset)) + "\n")
else:
    print("Date de intrare nevalide.")


# Rezolvare problema
generare_submultimi(n, [], 1)


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 13:22, 27 December 2023

Cerinta[edit | edit source]

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} pentru care diferența dintre oricare două elemente este mai mare decât 1.

Date de intrare[edit | edit source]

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

Date de iesire[edit | edit source]

Fişierul de ieşire submultimi1out.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[edit | edit source]

  • 1 ⩽ n ⩽ 10
  • elementele fiecărei submulțimi vor fi afișate în ordine crescătoare

Exemplul 1[edit | edit source]

submultimi1in.txt
5
submultimi1out.txt
Datele introduse corespund restrictiilor impuse
1
1 3
1 3 5
1 4
1 5
2
2 4
2 5
3
3 5
4
5

Exemplul 2[edit | edit source]

submultimi1in.txt
-9483
Datele introduse nu corespund restrictiilor impuse


Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> 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):
           if not current or abs(current[-1] - i) > 1:
               current.append(i)
               backtrack(i + 1, current)
               current.pop()
   backtrack(1, [])
   return submultimi[1:]  # Excludem mulțimea vidă
  1. Citire din fișierul de intrare

with open('submultimi1in.txt', 'r') as file:

   n = int(file.readline())
  1. Verificare restricții

if verifica_restrictii(n):

   # Generare submulțimi
   rezultat = genereaza_submultimi(n)
   # Scriere în fișierul de ieșire
   with open('submultimi1out.txt', 'w') as file_out:
       for subset in rezultat:
           file_out.write(" ".join(map(str, subset)) + "\n")

else:

   print("Date de intrare nevalide.")


</syntaxhighlight>