0262 - Intervale 1: Difference between revisions

From Bitnami MediaWiki
No edit summary
Line 34: Line 34:
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python3" line="1">
<syntaxhighlight lang="python3" line="1">
def cmmdc(a, b):
    while b:
        a, b = b, a % b
    return a
def gaseste_x(șir):
def gaseste_x(șir):
     diferențe = [șir[i + 1] - șir[i] for i in range(len(șir) - 1)]
     # Inițializare x cu o valoare mare
 
     x = float("inf")
    x = diferențe[0]
     for diferența in diferențe[1:]:
        x = cmmdc(x, diferența)
 
    return x


def main():
    # Parcurgere șir și actualizare x
     with open("intervale1.txt", "r") as f_in:
     for i in range(1, len(șir)):
         # Citim lungimea șirului
         distanța = int(șir[i] - șir[i-1])
         n = int(f_in.readline())
         x = min(x, distanța)


        # Citim șirul de numere reale
    return x + 1  # x este minimul număr natural care îndeplinește condiția
        sir = [float(f_in.readline()) for _ in range(n)]


     # Calculăm x folosind diferențele dintre elemente
# Citirea datelor din fișierul de intrare
     rezultat = gaseste_x(sir)
with open("intervale1in.txt", "r") as f:
     n = int(f.readline())
     șir = [float(f.readline()) for _ in range(n)]


    # Scriem rezultatul în fișierul de ieșire
# Calculul valorii x
    with open("intervale1.txt", "w") as f_out:
rezultat = gaseste_x(șir)
        f_out.write(str(rezultat) + "\n")


if __name__ == "__main__":
# Scrierea rezultatului în fișierul de ieșire
     main()
with open("intervale1out.txt", "w") as g:
     g.write(str(rezultat))


</syntaxhighlight>
</syntaxhighlight>

Revision as of 11:39, 27 December 2023

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 intervale1in.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 intervale1out.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

intervale1in.txt
6
3.5 5.1 9.2 16 20.33 100
intervale1out.txt
Datele introduse corespund restrictiilor impuse
2

Exemplul 2

intervale1in.out
6
100 20.33 16 9.2 5.1 3.5
Datele introduse nu corespund restrictiilor impuse


Rezolvare

<syntaxhighlight lang="python3" line="1"> def gaseste_x(șir):

   # Inițializare x cu o valoare mare
   x = float("inf")
   # Parcurgere șir și actualizare x
   for i in range(1, len(șir)):
       distanța = int(șir[i] - șir[i-1])
       x = min(x, distanța)
   return x + 1  # x este minimul număr natural care îndeplinește condiția
  1. Citirea datelor din fișierul de intrare

with open("intervale1in.txt", "r") as f:

   n = int(f.readline())
   șir = [float(f.readline()) for _ in range(n)]
  1. Calculul valorii x

rezultat = gaseste_x(șir)

  1. Scrierea rezultatului în fișierul de ieșire

with open("intervale1out.txt", "w") as g:

   g.write(str(rezultat))

</syntaxhighlight>