2809 - Crescator 1: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == Scrieți un program care citește un șir de cel mult '''10^6''' numere naturale din intervalul '''[0,10^9 ]''' ordonate crescător și determină cel mai mic număr din șir care apare de un număr impar de ori. Dacă în șir nu se află o astfel de valoare, se afișează mesajul '''nu exista'''. == Date de intrare == Fișierul de intrare '''crescator1.in''' conține cel mult '''10^6''' numere naturale din intervalul '''[0,10^9]''', ordonate crescător, separ...
 
No edit summary
Line 15: Line 15:
; ''crescator1.in''
; ''crescator1.in''
:5 5 8 8 8 8 20 20 20 34 54 54 65 65 65
:5 5 8 8 8 8 20 20 20 34 54 54 65 65 65
; ''Ecran''
: Datele sunt introduse corect.
; ''crescator1.out''
; ''crescator1.out''
:20
:20
Line 21: Line 23:
:4 1 1 1 2
:4 1 1 1 2
; ''secventeneuniforme.out''
; ''secventeneuniforme.out''
; ''Ecran''
: Datele nu corespund restrictiilor impuse.
:0
:0
===Exemplul 3===
===Exemplul 3===
; ''crescator1.in''
; ''crescator1.in''
:3 3 3 3
:3 3 3 3
; ''Ecran''
: Datele sunt introduse corect.
; ''crescator1.out''
; ''crescator1.out''
:nu exista
:nu exista
Line 56: Line 62:




def main():
if __name__ == '__main__':
     with open("crescator1.in") as fin:
     with open("in.txt") as fin:
         sir = [int(x) for x in fin.readline().split()]
         sir = [int(x) for x in fin.readline().split()]
         if validare_date(sir):
         if validare_date(sir):
             rezultat = numar_impar(sir)
             rezultat = numar_impar(sir)
             with open("crescator1.out", "w") as fout:
             with open("out.txt", "w") as fout:
                 if rezultat is not None:
                 if rezultat is not None:
                     fout.write(str(rezultat))
                     fout.write(str(rezultat))
                 else:
                 else:
                     fout.write("nu exista")
                     fout.write("nu exista")
                print("Datele introduse sunt corecte.")
         else:
         else:
             print("Datele nu corespund restricțiilor impuse.")
             print("Datele nu corespund restricțiilor impuse.")
if __name__ == "__main__":
    main()






</syntaxhighlight>
</syntaxhighlight>

Revision as of 16:45, 24 March 2023

Cerinţa

Scrieți un program care citește un șir de cel mult 10^6 numere naturale din intervalul [0,10^9 ] ordonate crescător și determină cel mai mic număr din șir care apare de un număr impar de ori. Dacă în șir nu se află o astfel de valoare, se afișează mesajul nu exista.

Date de intrare

Fișierul de intrare crescator1.in conține cel mult 10^6 numere naturale din intervalul [0,10^9], ordonate crescător, separate prin spații.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran: "Datele sunt introduse corect.",fișierul de ieșire crescator1.out va conține pe prima linie cel mai mic număr din fișierul de intrare care apare de un număr impar de ori sau mesajul nu exista dacă în fișier nu se află o astfel de valoare. În cazul în care datele nu respectă restricțiile, se va afișa: "Datele nu corespund restricțiilor impuse.".

= Restricţii şi precizări

  • Proiectați un algoritm eficient din punctul de vedere al spațiului de memorie utilizat şi al timpului de executare:
  • se recomandă o soluție care să nu memoreze elementele șirului într-un tablou sau altă structură de date similară.


Exemple

Exemplul 1

crescator1.in
5 5 8 8 8 8 20 20 20 34 54 54 65 65 65
Ecran
Datele sunt introduse corect.
crescator1.out
20

Exemplul 2

crescator1.in
4 1 1 1 2
secventeneuniforme.out
Ecran
Datele nu corespund restrictiilor impuse.
0

Exemplul 3

crescator1.in
3 3 3 3
Ecran
Datele sunt introduse corect.
crescator1.out
nu exista




Rezolvare

<syntaxhighlight lang="python" line="1">

  1. 2796 - Secvente Neuniforme

def validare_date(sir):

   if len(sir) > 10 ** 6:
       return False
   for i in range(1, len(sir)):
       if sir[i] < sir[i - 1]:
           return False
   return True


def numar_impar(sir):

   i = 0
   while i < len(sir):
       j = i
       while j < len(sir) and sir[j] == sir[i]:
           j += 1
       if (j - i) % 2 == 1:
           return sir[i]
       i = j
   return None


if __name__ == '__main__':

   with open("in.txt") as fin:
       sir = [int(x) for x in fin.readline().split()]
       if validare_date(sir):
           rezultat = numar_impar(sir)
           with open("out.txt", "w") as fout:
               if rezultat is not None:
                   fout.write(str(rezultat))
               else:
                   fout.write("nu exista")
               print("Datele introduse sunt corecte.")
       else:
           print("Datele nu corespund restricțiilor impuse.")


</syntaxhighlight>