0640 – NrFii: Difference between revisions

From Bitnami MediaWiki
Simina (talk | contribs)
Pagină nouă: = Cerința = Se dă vectorul de tați al unui arbore cu rădăcină cu <code>n</code> noduri. Determinați nodul din arbore cu număr maxim de fii. Dacă în arbore sunt mai multe noduri cu număr maxim de fii, afișați-le pe toate, în ordine crescătoare. = Date de intrare = Fișierul de intrare <code>nrfiiIN.txt</code> conține pe prima linie numărul de noduri <code>n</code>. Pe linia următoare se află vectorul de tați al arborelui, valorile fiind separate prin spaț...
 
Simina (talk | contribs)
No edit summary
 
(One intermediate revision by the same user not shown)
Line 6: Line 6:


= Date de ieșire =
= Date de ieșire =
Fișierul de ieșire <code>nrfiiOUT.txt</code> va conține pe prima linie nodurile din arbore cu număr maxim de fii, în ordine crescătoare, separate printr-un spațiu.
Fișierul de ieșire <code>nrfiiOUT.txt</code> va conține pe prima linie nodurile din arbore cu număr maxim de fii, în ordine crescătoare, separate printr-un spațiu.În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul "Nu corespunde restricțiilor impuse".


= Restricții și precizări =
= Restricții și precizări =
Line 14: Line 14:


= Exemplul 1: =
= Exemplul 1: =
<code>nrfiiIN.txt</code>
7
4 1 7 0 7 7 1
<code>nrfiiOUT.txt</code>
7
= Explicație =
Nodul <code>7</code> are număr maxim de fii, <code>3</code>.
== Exemplul 2: ==
<code>nrfiiIN.txt</code>
101
4 1 7 0 7 7 1
<code>nrfiiOUT.txt</code>
Datele nu corespund restrictiilor impuse
== Rezolvare ==
<syntaxhighlight lang="python3" line="1">
<syntaxhighlight lang="python3" line="1">
def citeste_arbore(file_path):
def citeste_arbore(file_path):
Line 57: Line 74:
         scrie_rezultat(file_output, noduri_max_fii)
         scrie_rezultat(file_output, noduri_max_fii)


</syntaxhighlight><code>nrfiiIN.txt</code>
</syntaxhighlight>
7
4 1 7 0 7 7 1
<code>nrfiiOUT.txt</code>
7
 
= Explicație =
Nodul <code>7</code> are număr maxim de fii, <code>3</code>.
 
== Exemplul 2: ==
<code>nrfiiIN.txt</code>
101
4 1 7 0 7 7 1
<code>nrfiiOUT.txt</code>
Datele nu corespund restrictiilor impuse
 
== Rezolvare ==

Latest revision as of 13:03, 7 January 2024

Cerința[edit | edit source]

Se dă vectorul de tați al unui arbore cu rădăcină cu n noduri. Determinați nodul din arbore cu număr maxim de fii. Dacă în arbore sunt mai multe noduri cu număr maxim de fii, afișați-le pe toate, în ordine crescătoare.

Date de intrare[edit | edit source]

Fișierul de intrare nrfiiIN.txt conține pe prima linie numărul de noduri n. Pe linia următoare se află vectorul de tați al arborelui, valorile fiind separate prin spații.

Date de ieșire[edit | edit source]

Fișierul de ieșire nrfiiOUT.txt va conține pe prima linie nodurile din arbore cu număr maxim de fii, în ordine crescătoare, separate printr-un spațiu.În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul "Nu corespunde restricțiilor impuse".

Restricții și precizări[edit | edit source]

  • 1 ≤ n ≤ 100
  • în vectorul de tați rădăcina este marcată cu 0

Exemplul 1:[edit | edit source]

nrfiiIN.txt

7
4 1 7 0 7 7 1 

nrfiiOUT.txt

7

Explicație[edit | edit source]

Nodul 7 are număr maxim de fii, 3.

Exemplul 2:[edit | edit source]

nrfiiIN.txt

101
4 1 7 0 7 7 1 

nrfiiOUT.txt

Datele nu corespund restrictiilor impuse

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def citeste_arbore(file_path):

   with open(file_path, 'r') as file:
       n = int(file.readline().strip())
       tati = list(map(int, file.readline().split()))
   return n, tati

def verificare_restrictii(n):

   if 1 <= n <= 100:
       return True
   else:
       with open("nrfiiOUT.txt", "w") as file_out:
           file_out.write("Datele nu corespund restrictiilor impuse")
       return False

def determina_noduri_max_fii(n, tati):

   fii = [0] * (n + 1)
   for tata in tati:
       if tata != -1:
           fii[tata] += 1
   max_fii = max(fii)
   noduri_max_fii = [i for i in range(1, n + 1) if fii[i] == max_fii]
   return noduri_max_fii

def scrie_rezultat(file_path, noduri_max_fii):

   with open(file_path, 'w') as file:
       if noduri_max_fii:
           file.write(' '.join(map(str, noduri_max_fii)))
       else:
           file.write("Datele nu corespund restrictiilor impuse")

if __name__ == "__main__":

   file_input = "nrfiiIN.txt"
   file_output = "nrfiiOUT.txt"
   n, tati = citeste_arbore(file_input)
   if verificare_restrictii(n):
       noduri_max_fii = determina_noduri_max_fii(n, tati)
       scrie_rezultat(file_output, noduri_max_fii)

</syntaxhighlight>