0262 - Intervale 1

From Bitnami MediaWiki
Revision as of 12:22, 13 December 2023 by Mesarosdenisa (talk | contribs) (Pagină nouă: == Cerinta == Se dă un șir de n numere reale, în ordine strict crescătoare. Să se determine un număr natural x, cu proprietatea că în orice interval deschis având drept capete oricare două valori din șir se află cel puțin x numere întregi. == Date de intrare == Fişierul de intrare intervale1.txt conţine pe prima linie numărul n; urmează n numere reale, în ordine strict crescătoare, separate prin spaţii, reprezentând elementele şirului, ce pot fi disp...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinta

Se dă un șir de n numere reale, în ordine strict crescătoare. Să se determine un număr natural x, cu proprietatea că în orice interval deschis având drept capete oricare două valori din șir se află cel puțin x numere întregi.

Date de intrare

Fişierul de intrare intervale1.txt conţine pe prima linie numărul n; urmează n numere reale, în ordine strict crescătoare, separate prin spaţii, reprezentând elementele şirului, ce pot fi dispuse pe mai multe linii.

Date de iesire

Fişierul de ieşire intervale1.txt va conţine pe prima linie numărul x.

Restrictii si precizari

  • 1 ≤ n ≤ 100.000
  • numerele reale din fișierul de intrare au valoarea absolută mai mică decât 100.000.000

Exemplul 1

Intrare
6
3.5 5.1 9.2 16 20.33 100
Iesire
Datele introduse corespund restrictiilor impuse
2

Exemplul 2

Intrare
6
100 20.33 16 9.2 5.1 3.5
Iesire
Datele introduse nu corespund restrictiilor impuse


Rezolvare

<syntaxhighlight lang="python3" line="1"> def cmmdc(a, b):

   while b:
       a, b = b, a % b
   return a

def gaseste_x(șir):

   diferențe = [șir[i + 1] - șir[i] for i in range(len(șir) - 1)]
   x = diferențe[0]
   for diferența in diferențe[1:]:
       x = cmmdc(x, diferența)
   return x

def main():

   with open("intervale1.txt", "r") as f_in:
       # Citim lungimea șirului
       n = int(f_in.readline())
       # Citim șirul de numere reale
       sir = [float(f_in.readline()) for _ in range(n)]
   # Calculăm x folosind diferențele dintre elemente
   rezultat = gaseste_x(sir)
   # Scriem rezultatul în fișierul de ieșire
   with open("intervale1.txt", "w") as f_out:
       f_out.write(str(rezultat) + "\n")

if __name__ == "__main__":

   main()

</syntaxhighlight>