0368 - Nr Pal

From Bitnami MediaWiki
Revision as of 18:23, 28 April 2023 by Tamas Claudia (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Sursă: [1]

Cerinţa[edit | edit source]

Se dau două numere naturale n și m. Determinati numărul de palindromuri cuprinse în intervalul determinat de cele două numere.

Date de intrare[edit | edit source]

Programul citește de la tastatură două numere naturale n și m.

Date de ieşire[edit | edit source]

Dacă datele introduse sunt corecte, pe ecran se va afișa "Datele introduse sunt corecte.", apoi programul afișează numărul p, reprezentând numărul de palindromuri cuprinse în intervalul determinat de n și m. În caz contrar, se va afișa pe ecran mesajul "Datele introduse nu sunt corecte.".

Restricții și precizări[edit | edit source]

  • 1 ⩽ n, m ⩽ 1.000.000
  • nu este obligatoriu ca valorile citite să respecte condiția n ⩽ m.

Exemplu[edit | edit source]

Intrare
130 85
Ieșire
Datele introduse sunt corecte.
5

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 0368

def este_palindrom(n):

   oglindit = 0
   aux = n
   while aux > 0:
       oglindit = oglindit * 10 + aux % 10
       aux //= 10
   return n == oglindit

def numara_palindroame(n, m):

   if n > m:
       n, m = m, n
   contor = 0
   for i in range(n, m + 1):
       if este_palindrom(i):
           contor += 1
   return contor


if __name__ == "__main__":

   n, m = map(int, input("Introduceti doua numere naturale: ").split())
   if n < 1 or m < 1 or n > 1000000 or m > 1000000:
       print("Datele introduse nu sunt corecte.")
   else:
       print("Datele introduse sunt corecte.")
       p = numara_palindroame(n, m)
       print(p)


</syntaxhighlight>

Explicație rezolvare[edit | edit source]

Funcția este_palindrom(n) primește un număr întreg n și returnează True dacă acesta este un palindrom, respectiv False în caz contrar. Funcția folosește o buclă while pentru a inversa cifrele lui n, comparând apoi rezultatul cu n.

Funcția numara_palindroame(n, m) primește două numere întregi n și m și returnează numărul de palindroame din intervalul [n, m]. Această funcție parcurge intervalul și, pentru fiecare număr, apelează funcția este_palindrom pentru a verifica dacă este palindrom, adăugând la un contor contor în caz afirmativ.

În blocul if __name__ == "__main__": se citește de la tastatură două numere întregi n și m, apoi se verifică dacă valorile introduse respectă restricțiile impuse prin verificarea valorilor lor. Dacă valorile sunt corecte, se afișează un mesaj corespunzător, se calculează numărul de palindroame prin apelul funcției numara_palindroame și se afișează rezultatul.