2111 - Centrale: Difference between revisions

From Bitnami MediaWiki
No edit summary
 
(One intermediate revision by the same user not shown)
Line 28: Line 28:


== Rezolvare ==  
== Rezolvare ==  
=== Rezolvare ver. 1 ===
<syntaxhighlight lang="python" line>
def este_numar_central(nr_de_numere):
    cifre = str(nr_de_numere)[1:-1]
    return all(c == cifre[0] for c in cifre)
def validare_date_intrare(nr_de_numere, numere):
    if nr_de_numere < 1 or nr_de_numere > 100:
        return False
    for numar in numere:
        if numar <= 0 or numar > 10**9:
            return False
    return True
def numara_numere_centrale(numere):
    return sum(este_numar_central(x) for x in numere)
def scrie_date_iesire(numere_centrale):
    with open('centrale.out', 'w') as f:
        f.write(str(numere_centrale) + '\n')
if __name__ == "__main__":
    with open('centrale.in', 'r') as f:
        nr_de_numere = int(f.readline().strip())
        numere = list(map(int, f.readline().strip().split()))
    if not validare_date_intrare(nr_de_numere, numere):
        print("Eroare: Datele introduse nu sunt valide!")
        exit()
    numere_centrale = numara_numere_centrale(numere)
    scrie_date_iesire(numere_centrale)
</syntaxhighlight>
=== Rezolvare ver. 2 ===
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>


def este_numar_central(n):
def este_numar_central(nr_de_numere):
    # Eliminăm prima și ultima cifră
     cifre = str(nr_de_numere)[1:-1]
     cifre = str(n)[1:-1]
    # Verificăm dacă toate cifrele sunt egale
     return all(c == cifre[0] for c in cifre)
     return all(c == cifre[0] for c in cifre)


# Citim datele de intrare
def validare_pozitivitate(numere):
with open('centrale.in', 'r') as f:
    return all(numar > 0 for numar in numere)
    n = int(f.readline().strip())
 
    numere = list(map(int, f.readline().strip().split()))
if __name__ == "__main__":
    with open('centrale.in', 'r') as f:
        nr_de_numere = int(f.readline().strip())
        numere = list(map(int, f.readline().strip().split()))


    # Validăm datele de intrare
     if nr_de_numere != len(numere):
     if n != len(numere):
         print("Eroare: Numărul de numere nu corespunde cu N!")
         print("Eroare: Numărul de numere nu corespunde cu N!")
         exit(1)
         exit(1)


     # Verificăm fiecare număr și numărăm câte sunt centrale
     if not validare_pozitivitate(numere):
        print("Eroare: Numerele introduse nu sunt strict pozitive!")
        exit(1)
 
     numere_centrale = sum(este_numar_central(x) for x in numere)
     numere_centrale = sum(este_numar_central(x) for x in numere)


# Scriem rezultatul în fișierul de ieșire
    with open('centrale.out', 'w') as f:
with open('centrale.out', 'w') as f:
        f.write(str(numere_centrale) + '\n')
    f.write(str(numere_centrale) + '\n')
 
print("Datele introduse sunt corecte.")
    print("Datele introduse sunt corecte.")


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 09:03, 19 May 2023

Sursa: [1]


Enunt[edit | edit source]

Cristina şi Alina sunt eleve în clasa a V-a şi sunt foarte bune prietene. Le place ca în pauze să se provoace reciproc cu câte o problemă. De data aceasta, e rândul Cristinei să propună o problemă Alinei. Ea îi cere ca dintr-un set de mai multe numere naturale să le găsească pe cele centrale. Bineînţeles că mai întâi îi explică prietenei sale ce este un număr central: un număr care are proprietatea ca, după eliminarea primei şi a ultimei cifre, se obţine un nou număr care conţine numai cifre egale între ele. De exemplu, numărul 67771 este număr central pentru că, eliminând prima şi ultima cifră, se obţine numărul 777 care are toate cifrele egale între ele. Alina, care între timp a învăţat să programeze, intră imediat în jocul Cristinei, ştiind că va afla imediat rezultatul corect la problema propusă de prietena ei.

Cerinţa[edit | edit source]

Având la dispoziţie un set de numere pe care le primeşte pentru verificare, Alina trebuie să spună câte dintre acestea sunt numere centrale.

Date de intrare[edit | edit source]

Fişierul de intrare centrale.in conţine pe prima linie numărul de numere ce trebuie verificate. Pe următoarea linie se găsesc acel numar de numere naturale, separate prin câte un spaţiu.

Date de ieșire[edit | edit source]

Fişierul de ieşire centrale.out va conţine o singură linie pe care va fi scris numărul de numere centrale găsite între numerele ce trebuie verificate.

Restricţii şi precizări[edit | edit source]

  • 1 ≤ nr_de_numere ≤ 100
  • Fiecare număr din setul dat are cel puţin 3 cifre şi cel mult 9 cifre

Exemplu[edit | edit source]

centrale.in
5
81318 71117 2258 933 21110
centrale.out
3

Explicație[edit | edit source]

Dintre cele 5 numere din setul dat, sunt 3 numere centrale: 71117, 933 şi 21110.

Rezolvare[edit | edit source]

Rezolvare ver. 1[edit | edit source]

<syntaxhighlight lang="python" line>

def este_numar_central(nr_de_numere):

   cifre = str(nr_de_numere)[1:-1]
   return all(c == cifre[0] for c in cifre)

def validare_date_intrare(nr_de_numere, numere):

   if nr_de_numere < 1 or nr_de_numere > 100:
       return False
   for numar in numere:
       if numar <= 0 or numar > 10**9:
           return False
   return True

def numara_numere_centrale(numere):

   return sum(este_numar_central(x) for x in numere)

def scrie_date_iesire(numere_centrale):

   with open('centrale.out', 'w') as f:
       f.write(str(numere_centrale) + '\n')

if __name__ == "__main__":

   with open('centrale.in', 'r') as f:
       nr_de_numere = int(f.readline().strip())
       numere = list(map(int, f.readline().strip().split()))
   if not validare_date_intrare(nr_de_numere, numere):
       print("Eroare: Datele introduse nu sunt valide!")
       exit()
   numere_centrale = numara_numere_centrale(numere)
   scrie_date_iesire(numere_centrale)

</syntaxhighlight>

Rezolvare ver. 2[edit | edit source]

<syntaxhighlight lang="python" line>

def este_numar_central(nr_de_numere):

   cifre = str(nr_de_numere)[1:-1]
   return all(c == cifre[0] for c in cifre)

def validare_pozitivitate(numere):

   return all(numar > 0 for numar in numere)

if __name__ == "__main__":

   with open('centrale.in', 'r') as f:
       nr_de_numere = int(f.readline().strip())
       numere = list(map(int, f.readline().strip().split()))
   if nr_de_numere != len(numere):
       print("Eroare: Numărul de numere nu corespunde cu N!")
       exit(1)
   if not validare_pozitivitate(numere):
       print("Eroare: Numerele introduse nu sunt strict pozitive!")
       exit(1)
   numere_centrale = sum(este_numar_central(x) for x in numere)
   with open('centrale.out', 'w') as f:
       f.write(str(numere_centrale) + '\n')
   print("Datele introduse sunt corecte.")

</syntaxhighlight>