4227 - Cif Tr: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
Sursă: [https://www.pbinfo.ro/probleme/4227/cif-tr]
Sursă: [https://www.pbinfo.ro/probleme/4227/cif-tr]
<br>
 
Când adunăm două cifre '''cifra1''' și '''cifra2''', obținem transport dacă '''cifra1''' + '''cifra2''' ≥ 10. Când adunăm două numere naturale, se poate obține chiar de mai multe ori transport. De exemplu, dacă adunăm 538 și 726, atunci obținem de două ori transport, prima oară când adunăm cifrele unităților, 8 + 6, a doua oară când adunăm cifrele sutelor, 5 + 7.
== Cerinţa ==
== Cerinţa ==
Se dau două numere naturale '''cifra1''' și '''cifra2''' care au același număr de cifre. Să se afișeze mesajul NU dacă adunând cele două numere cifră cu cifră nu obținem niciodată transport, sau mesajul DA, dacă obținem măcar o dată transport.
Când adunăm două cifre '''cifra1''' și '''cifra2''', obținem transport dacă '''cifra1''' + '''cifra2''' ≥ 10. Când adunăm două numere naturale, se poate obține chiar de mai multe ori transport. De exemplu, dacă adunăm 538 și 726, atunci obținem de două ori transport, prima oară când adunăm cifrele unităților, 8 + 6, a doua oară când adunăm cifrele sutelor, 5 + 7. <br><br>
Se dau două numere naturale '''n''' și '''m''' care au același număr de cifre. Să se afișeze mesajul NU dacă adunând cele două numere cifră cu cifră nu obținem niciodată transport, sau mesajul DA, dacă obținem măcar o dată transport.
== Date de intrare ==
== Date de intrare ==
Programul citește de la tastatură numerele '''cifra1''' și '''cifra2'''.
Programul citește de la tastatură numerele '''n''' și '''m'''.
== Date de ieşire ==
== Date de ieşire ==
Programul va afișa pe ecran mesajul '''NU''' dacă adunând cele două numere cifră cu cifră nu obținem niciodată transport, sau mesajul '''DA''', dacă obținem măcar o dată transport.
Dacă datele introduse sunt corecte, pe ecran se va afișa '''"Datele introduse sunt corecte."''', apoi programul va afișa mesajul '''NU''' dacă adunând cele două numere cifră cu cifră nu obținem niciodată transport, sau mesajul '''DA''', dacă obținem măcar o dată transport. Î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 &les; cifra1, cifra2 &les; 1.000.000.000
* ''' 1 &les; n, m &les; 1.000.000.000
* numerele '''cifra1''' și '''cifra2''' au același număr de cifre
* numerele '''n''' și '''m''' au același număr de cifre


== Exemplu ==
== Exemplu ==
Line 16: Line 16:
: 538 726
: 538 726
; Ieșire
; Ieșire
: Datele introduse sunt corecte.
: DA
: DA
<br>
<br>
Line 21: Line 22:
: 1234 8765
: 1234 8765
; Ieșire
; Ieșire
: Datele introduse sunt corecte.
: NU
: NU
== Rezolvare ==
== Rezolvare ==


<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#4227


cifra1 = input()
def verifica_date(numar1, numar2):
cifra2 = input()
    if len(numar1) != len(numar2) or not numar1.isdigit() or not numar2.isdigit():
        print("Datele introduse nu sunt corecte.")
        return False
    print("Datele introduse sunt corecte.")
    return True


are_transport = False
def are_transport(numar1, numar2):
    for i in range(len(numar1)):
        suma = int(numar1[i]) + int(numar2[i])
        if suma >= 10:
            return True
    return False


for i in range(len(cifra1)):
if __name__ == "__main__":
     suma = int(cifra1[i]) + int(cifra2[i])
    numar1 = int(input("Introduceti primul numar: "))
     if suma >= 10:
     numar2 = int(input("Introduceti al doilea numar: "))
         are_transport = True
     if verifica_date(numar1, numar2):
         break
         if are_transport(numar1, numar2):
            print("DA")
         else:
            print("NU")


if are_transport:
    print("DA")
else:
    print("NU")


</syntaxhighlight>
</syntaxhighlight>
== Explicație rezolvare ==
Funcția '''verifica_date''' primește două argumente, '''numar1''' și '''numar2''', și verifică dacă acestea au aceeași lungime și dacă fiecare cifră din cele două numere este un număr întreg. Dacă aceste condiții sunt îndeplinite, funcția afișează "Datele introduse sunt corecte." și returnează valoarea True, în caz contrar, afișează "Datele introduse nu sunt corecte." și returnează valoarea False.<br><br>Funcția '''are_transport''' primește, de asemenea, două argumente, '''numar1''' și '''numar2''', și verifică dacă există cel puțin un transport atunci când cele două numere sunt adunate cifră cu cifră. Pentru aceasta, funcția parcurge cifră cu cifră cele două numere și calculează suma. Dacă suma este mai mare sau egală cu 10, funcția returnează valoarea '''True''', altfel returnează valoarea '''False'''.<br><br>În final, funcția '''main''' primește două valori de la utilizator prin intermediul funcției '''input''', apelează funcția '''verifica_date''' pentru a verifica corectitudinea datelor, iar dacă acestea sunt corecte, apelează funcția '''are_transport''' pentru a verifica dacă există un transport în timpul adunării. În funcție de rezultatul obținut, programul afișează '''DA''' dacă există cel puțin un transport și '''NU''' dacă nu există niciun transport.

Latest revision as of 17:52, 5 May 2023

Sursă: [1]

Cerinţa[edit]

Când adunăm două cifre cifra1 și cifra2, obținem transport dacă cifra1 + cifra2 ≥ 10. Când adunăm două numere naturale, se poate obține chiar de mai multe ori transport. De exemplu, dacă adunăm 538 și 726, atunci obținem de două ori transport, prima oară când adunăm cifrele unităților, 8 + 6, a doua oară când adunăm cifrele sutelor, 5 + 7.

Se dau două numere naturale n și m care au același număr de cifre. Să se afișeze mesajul NU dacă adunând cele două numere cifră cu cifră nu obținem niciodată transport, sau mesajul DA, dacă obținem măcar o dată transport.

Date de intrare[edit]

Programul citește de la tastatură numerele n și m.

Date de ieşire[edit]

Dacă datele introduse sunt corecte, pe ecran se va afișa "Datele introduse sunt corecte.", apoi programul va afișa mesajul NU dacă adunând cele două numere cifră cu cifră nu obținem niciodată transport, sau mesajul DA, dacă obținem măcar o dată transport. În caz contrar, se va afișa pe ecran mesajul "Datele introduse nu sunt corecte.".

Restricții și precizări[edit]

  • 1 ⩽ n, m ⩽ 1.000.000.000
  • numerele n și m au același număr de cifre

Exemplu[edit]

Intrare
538 726
Ieșire
Datele introduse sunt corecte.
DA


Intrare
1234 8765
Ieșire
Datele introduse sunt corecte.
NU

Rezolvare[edit]

<syntaxhighlight lang="python" line>

  1. 4227

def verifica_date(numar1, numar2):

   if len(numar1) != len(numar2) or not numar1.isdigit() or not numar2.isdigit():
       print("Datele introduse nu sunt corecte.")
       return False
   print("Datele introduse sunt corecte.")
   return True

def are_transport(numar1, numar2):

   for i in range(len(numar1)):
       suma = int(numar1[i]) + int(numar2[i])
       if suma >= 10:
           return True
   return False

if __name__ == "__main__":

   numar1 = int(input("Introduceti primul numar: "))
   numar2 = int(input("Introduceti al doilea numar: "))
   if verifica_date(numar1, numar2):
       if are_transport(numar1, numar2):
           print("DA")
       else:
           print("NU")


</syntaxhighlight>

Explicație rezolvare[edit]

Funcția verifica_date primește două argumente, numar1 și numar2, și verifică dacă acestea au aceeași lungime și dacă fiecare cifră din cele două numere este un număr întreg. Dacă aceste condiții sunt îndeplinite, funcția afișează "Datele introduse sunt corecte." și returnează valoarea True, în caz contrar, afișează "Datele introduse nu sunt corecte." și returnează valoarea False.

Funcția are_transport primește, de asemenea, două argumente, numar1 și numar2, și verifică dacă există cel puțin un transport atunci când cele două numere sunt adunate cifră cu cifră. Pentru aceasta, funcția parcurge cifră cu cifră cele două numere și calculează suma. Dacă suma este mai mare sau egală cu 10, funcția returnează valoarea True, altfel returnează valoarea False.

În final, funcția main primește două valori de la utilizator prin intermediul funcției input, apelează funcția verifica_date pentru a verifica corectitudinea datelor, iar dacă acestea sunt corecte, apelează funcția are_transport pentru a verifica dacă există un transport în timpul adunării. În funcție de rezultatul obținut, programul afișează DA dacă există cel puțin un transport și NU dacă nu există niciun transport.