1286 - submultimi1: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == 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} pentru care diferența dintre oricare două elemente este mai mare decât 1. == Date de intrare == Fişierul de intrare submultimi1.txt conţine pe prima linie numărul n. == Date de iesire == Fişierul de ieşire submultimi1.txt va conţine pe fiecare linie câte o submulțime, elementele unei submulțimi fiind separate pri...
 
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
== Cerinta ==
== 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} pentru care diferența dintre oricare două elemente este mai mare decât 1.
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 ==
== Date de intrare ==


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


== Date de iesire ==
== Date de iesire ==


Fişierul de ieşire submultimi1.txt va conţine pe fiecare linie câte o submulțime, elementele unei submulțimi fiind separate printr-un spațiu.
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 ==
== Restrictii si precizari ==


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


== Exemplul 1 ==
== Exemplul 1 ==
;Intrare
;submultimi1in.txt
:5
:5
;Iesire
;submultimi1out.txt
;Datele introduse corespund restrictiilor impuse
:Datele introduse corespund restrictiilor impuse
:1  
:1  
:1 3  
:1 3  
Line 35: Line 35:


== Exemplul 2 ==
== Exemplul 2 ==
;Intrare
;submultimi1in.txt
:-9483
:-9483
;Iesire
 
;Datele introduse nu corespund restrictiilor impuse
:Datele introduse nu corespund restrictiilor impuse




== 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)))
def genereaza_submultimi(n):
        return
    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ă


    # Includem elementul la index în submulțime
# Citire din fișierul de intrare
    if len(subset) == 0 or abs(subset[-1] - index) > 1:
with open('submultimi1in.txt', 'r') as file:
        generare_submultimi(n, subset + [index], index + 1)
    n = int(file.readline())


     # Nu includem elementul la index în submulțime
# Verificare restricții
     generare_submultimi(n, subset, index + 1)
if verifica_restrictii(n):
     # Generare submulțimi
     rezultat = genereaza_submultimi(n)


# Citire date de intrare
    # Scriere în fișierul de ieșire
with open("submultimi1.txt", "r") as file:
    with open('submultimi1out.txt', 'w') as file_out:
     n = int(file.readline().strip())
        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>