0368 - Nr Pal: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: Sursă: [https://www.pbinfo.ro/probleme/368/nrpal] == Cerinţa == Se dau două numere naturale '''numar1''' și '''numar2'''. Determinati numărul de palindromuri cuprinse în intervalul determinat de cele două numere. == Date de intrare == Programul citește de la tastatură două numere naturale '''numar1''' și '''numar2'''. == Date de ieşire == Programul afișează pe ecran numărul '''palindrom''', reprezentând numărul de palindromuri cuprinse în intervalul determi...
 
No edit summary
 
Line 2: Line 2:


== Cerinţa ==
== Cerinţa ==
Se dau două numere naturale '''numar1''' și '''numar2'''. Determinati numărul de palindromuri cuprinse în intervalul determinat de cele două numere.
Se dau două numere naturale '''n''' și '''m'''. Determinati numărul de palindromuri cuprinse în intervalul determinat de cele două numere.
== Date de intrare ==
== Date de intrare ==
Programul citește de la tastatură două numere naturale '''numar1''' și '''numar2'''.
Programul citește de la tastatură două numere naturale '''n''' și '''m'''.
== Date de ieşire ==
== Date de ieşire ==
Programul afișează pe ecran numărul '''palindrom''', reprezentând numărul de palindromuri cuprinse în intervalul determinat de '''numar1''' și '''numar2'''.
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 ==
== Restricții și precizări ==
* ''' 1 ⩽ numar1, numar2 ⩽ 1.000.000'''
* ''' 1 ⩽ n, m ⩽ 1.000.000'''
* nu este obligatoriu ca valorile citite să respecte condiția '''numar1 ⩽ numar2'''.
* nu este obligatoriu ca valorile citite să respecte condiția '''n ⩽ m'''.


== Exemplu ==
== Exemplu ==
Line 15: Line 15:
: 130 85
: 130 85
; Ieșire
; Ieșire
: Datele introduse sunt corecte.
: 5
: 5
== Rezolvare ==
== Rezolvare ==


<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#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)


numar1,numar2 = map(int, input().split())
palindrom = 0
if numar1 <= numar2:
    for i in range(numar1, numar2+1):
        n = i
        aux = i
        ogl = 0
        while n != 0:
            ogl = ogl*10 + n%10
            n //= 10
        if aux == ogl:
            palindrom += 1
else:
    for i in range(numar2, numar1+1):
        n = i
        aux = i
        ogl = 0
        while n != 0:
            ogl = ogl*10 + n%10
            n //= 10
        if aux == ogl:
            palindrom += 1
print(palindrom)


</syntaxhighlight>
</syntaxhighlight>
== Explicație rezolvare ==
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'''.<br><br>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.<br><br>Î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.

Latest revision as of 18:23, 28 April 2023

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.