0239 - NrLipsa: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/239/nrlipsa - NrLipsa] ---- == Cerinţa == Se dau mai multe numere naturale cu cel mult '''9''' cifre fiecare. Să se determine cele mai mari două numere de '''3''' cifre care nu se găsesc printre numerele date. == Date de intrare == Fişierul de intrare '''nrlipsa.in''' conţine cel mult '''100.000''' de numere, dispuse pe mai multe linii, numerele de pe fiecare linie fiind separate prin unul sau mai multe spaţii. == Date de ieșire...
 
No edit summary
Line 22: Line 22:
===Exemplul 2===
===Exemplul 2===
; nrlipsa.in
; nrlipsa.in
: 1000001 214141251521
: 100 101 102 (...) 997 998 999
; Ieșire
; Ieșire
: Datele sunt corecte.
: Datele sunt corecte.
Line 29: Line 29:
===Exemplul 3===
===Exemplul 3===
; nrlipsa.in
; nrlipsa.in
: 1000 10001 100023 213123
: 1 1 1 1 1 1... (de 100001 ori)
; Ieșire
; Ieșire
: Datele sunt corecte.
: Datele nu sunt comform restricțiilor impuse.
; nrlipsa.out
: 999 998
<br>
<br>
== Rezolvare ==  
== Rezolvare ==  

Revision as of 11:56, 19 March 2023

Sursa: - NrLipsa


Cerinţa

Se dau mai multe numere naturale cu cel mult 9 cifre fiecare. Să se determine cele mai mari două numere de 3 cifre care nu se găsesc printre numerele date.

Date de intrare

Fişierul de intrare nrlipsa.in conţine cel mult 100.000 de numere, dispuse pe mai multe linii, numerele de pe fiecare linie fiind separate prin unul sau mai multe spaţii.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.", iar apoi in fişierul de ieşire nrlipsa.out va conţine pe prima linie cele mai mari două numere de trei cifre care nu apar în fişierul de intrare, ordonate descrescător, separate prin exact un spaţiu. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".

Restricţii şi precizări

  • Dacă nu există două numere de trei cifre care să nu se afle în fişierul de intrare atunci se va afişa mesajul NU.

Exemple

Exemplul 1

nrlipsa.in
12 2345 123 67 989 6 999
123 67 989 999
Ieșire
Datele sunt corecte.
nrlipsa.out
998 997

Exemplul 2

nrlipsa.in
100 101 102 (...) 997 998 999
Ieșire
Datele sunt corecte.
nrlipsa.out
NU

Exemplul 3

nrlipsa.in
1 1 1 1 1 1... (de 100001 ori)
Ieșire
Datele nu sunt comform restricțiilor impuse.


Rezolvare

<syntaxhighlight lang="python" line>

  1. 0239 NrLipsa

def nrlipsa(vector_verificare):

   i = 0;
   j = 0
   for k in range(999, 100, -1):
       if vector_verificare[k] == 0:
           if i == 0:
               i = k
           elif j == 0:
               j = k
           else:
               break
   f = open("nrlipsa.out", "w")
   if i != 0 and j != 0:
       line = [str(i), " ", str(j)]
       f.writelines(line)
   else:
       f.write("NU")

def conform_restrictiilor():

   vector = list()
   vector_verificare = [0] * 1000
   with open('nrlipsa.in') as f:
       lines = f.readlines()
       for line in lines:
           for c in line.split():
               if c.isdigit() == True:
                   vector.append(int(c))
   if len(vector) > 100000:
       print("Datele nu sunt comform restricțiilor impuse.")
       exit()
   for x in vector:
       if x < 0 or x >= 1000000:
           print("Datele nu sunt comform restricțiilor impuse.")
           exit()
       if x >= 100 and x <= 999:
           vector_verificare[x] = 1
   print("Datele sunt corecte.")
   return vector_verificare

if __name__ == '__main__':

   vector_verificare = conform_restrictiilor()
   nrlipsa(vector_verificare)

</syntaxhighlight>