4215 - Alipit: Difference between revisions
Pagină nouă: Sursă: [https://www.pbinfo.ro/probleme/4215/alipit] == Cerinţa == Să se verifice dacă un număr natural '''numar''' este “alipit”. == Date de intrare == Programul citește de la tastatură numărul '''numar'''. == Date de ieşire == Programul va afișa pe ecran mesajul '''DA''' dacă '''numar''' este “alipit”, sau mesajul '''NU''' în caz contrar . == Restricții și precizări == * '''1 ⩽ numar ⩽100.000.000.000 ''' == Exemplu == ; Intrare : 1212 ; Ieși... |
No edit summary |
||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
Sursă: [https://www.pbinfo.ro/probleme/4215/alipit] | Sursă: [https://www.pbinfo.ro/probleme/4215/alipit] | ||
== Cerinţa == | == Cerinţa == | ||
Să se verifice dacă un număr natural ''' | Să se verifice dacă un număr natural '''n''' este “alipit”. | ||
== Date de intrare == | == Date de intrare == | ||
Programul citește de la tastatură numărul ''' | Programul citește de la tastatură numărul '''n'''. | ||
== Date de ieşire == | == Date de ieşire == | ||
Dacă datele introduse sunt corecte, pe ecran se va afișa '''"Datele introduse sunt corecte."''', apoi programul va afișa mesajul '''DA''' dacă '''n''' este “alipit”, sau mesajul '''NU''' în caz contrar . În cazul în care datele introduse nu sunt corecte, se va afișa pe ecran mesajul '''"Datele introduse nu sunt corecte."'''. | |||
== Restricții și precizări == | == Restricții și precizări == | ||
* '''1 ⩽ | * '''1 ⩽ n ⩽100.000.000.000 ''' | ||
== Exemplu == | == Exemplu == | ||
Line 13: | Line 13: | ||
: 1212 | : 1212 | ||
; Ieșire | ; Ieșire | ||
: Datele introduse sunt corecte. | |||
: DA | : DA | ||
Line 18: | Line 19: | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
#4215 | |||
def verificare_numar(n): | |||
if not isinstance(n, int) or n < 1 or n > 100000000000: | |||
return False | |||
return True | |||
def este_alipit(n): | |||
numar = str(n) | |||
lungime = len(numar) | |||
# parcurgem toate lungimile posibile pentru un șir repetat | |||
for lungime_subsir in range(1, lungime // 2 + 1): | |||
# extragem șirul repetat | |||
subsir = numar[:lungime_subsir] | |||
# verificam daca șirul se poate repeta pentru a forma numarul dat | |||
if subsir * (lungime // lungime_subsir) + subsir[:lungime % lungime_subsir] == numar: | |||
return True | |||
return False | |||
if __name__ == "__main__": | |||
n = int(input("Introduceti un numar natural: ")) | |||
if verificare_numar(n): | |||
print("Datele introduse sunt corecte.") | |||
if este_alipit(n): | |||
print("DA") | |||
else: | |||
print("NU") | |||
else: | |||
print("Datele introduse nu sunt corecte.") | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Explicație rezolvare == | |||
Funcția '''verificare_numar(n)''' primește ca parametru un număr întreg '''n''' și returnează '''True''' dacă '''n''' este un număr natural între 1 și 100000000000 și '''False''' în caz contrar. Aceasta se realizează prin verificarea dacă '''n''' nu este un număr întreg (utilizând funcția isinstance) sau dacă este mai mic decât 1 sau mai mare decât 100000000000.<br><br>Funcția '''este_alipit(n)''' primește ca parametru un număr întreg '''n''' și returnează '''True''' dacă '''n''' este "alipit" și '''False''' în caz contrar. Pentru a verifica acest lucru, se convertește numărul la un șir de caractere (numar = str(n)) și se calculează lungimea acestuia (lungime = len(numar)). Se parcurg toate lungimile posibile pentru un șir repetat, începând cu lungimea 1 și mergând până la jumătate din lungimea totală a șirului (for lungime_subsir in range(1, lungime // 2 + 1):). Se extrage șirul repetat (subsir = numar[:lungime_subsir]) și se verifică dacă acesta poate fi repetat de un număr de ori astfel încât să formeze numărul dat (if subsir * (lungime // lungime_subsir) + subsir[:lungime % lungime_subsir] == numar:). În caz afirmativ, se returnează True. În caz contrar, se continuă parcurgerea lungimilor posibile pentru șirul repetat până la epuizarea acestora, moment în care se returnează False.<br><br>Funcția principală se ocupă de interacțiunea cu utilizatorul și afișează rezultatul final în funcție de valorile returnate de funcțiile anterioare. Se citeste numarul de la tastatură (n = int(input("Introduceti un numar natural: "))) și se verifică dacă datele introduse sunt corecte folosind funcția '''verificare_numar(n)'''. Dacă datele sunt corecte, se afișează mesajul corespunzător (print("Datele introduse sunt corecte.")) și se verifică dacă numărul este "alipit" folosind funcția este_alipit(n). În funcție de rezultatul obținut, se afișează mesajul '''"DA"''' sau '''"NU"'''. Dacă datele introduse nu sunt corecte, se afișează mesajul corespunzător (`print("Datele introduse nu sunt corecte."). |
Latest revision as of 17:25, 28 April 2023
Sursă: [1]
Cerinţa[edit | edit source]
Să se verifice dacă un număr natural n este “alipit”.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n.
Date de ieşire[edit | edit source]
Dacă datele introduse sunt corecte, pe ecran se va afișa "Datele introduse sunt corecte.", apoi programul va afișa mesajul DA dacă n este “alipit”, sau mesajul NU în caz contrar . În cazul în care datele introduse nu sunt corecte, se va afișa pe ecran mesajul "Datele introduse nu sunt corecte.".
Restricții și precizări[edit | edit source]
- 1 ⩽ n ⩽100.000.000.000
Exemplu[edit | edit source]
- Intrare
- 1212
- Ieșire
- Datele introduse sunt corecte.
- DA
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 4215
def verificare_numar(n):
if not isinstance(n, int) or n < 1 or n > 100000000000: return False return True
def este_alipit(n):
numar = str(n) lungime = len(numar) # parcurgem toate lungimile posibile pentru un șir repetat for lungime_subsir in range(1, lungime // 2 + 1): # extragem șirul repetat subsir = numar[:lungime_subsir] # verificam daca șirul se poate repeta pentru a forma numarul dat if subsir * (lungime // lungime_subsir) + subsir[:lungime % lungime_subsir] == numar: return True return False
if __name__ == "__main__":
n = int(input("Introduceti un numar natural: ")) if verificare_numar(n): print("Datele introduse sunt corecte.") if este_alipit(n): print("DA") else: print("NU") else: print("Datele introduse nu sunt corecte.")
</syntaxhighlight>
Explicație rezolvare[edit | edit source]
Funcția verificare_numar(n) primește ca parametru un număr întreg n și returnează True dacă n este un număr natural între 1 și 100000000000 și False în caz contrar. Aceasta se realizează prin verificarea dacă n nu este un număr întreg (utilizând funcția isinstance) sau dacă este mai mic decât 1 sau mai mare decât 100000000000.
Funcția este_alipit(n) primește ca parametru un număr întreg n și returnează True dacă n este "alipit" și False în caz contrar. Pentru a verifica acest lucru, se convertește numărul la un șir de caractere (numar = str(n)) și se calculează lungimea acestuia (lungime = len(numar)). Se parcurg toate lungimile posibile pentru un șir repetat, începând cu lungimea 1 și mergând până la jumătate din lungimea totală a șirului (for lungime_subsir in range(1, lungime // 2 + 1):). Se extrage șirul repetat (subsir = numar[:lungime_subsir]) și se verifică dacă acesta poate fi repetat de un număr de ori astfel încât să formeze numărul dat (if subsir * (lungime // lungime_subsir) + subsir[:lungime % lungime_subsir] == numar:). În caz afirmativ, se returnează True. În caz contrar, se continuă parcurgerea lungimilor posibile pentru șirul repetat până la epuizarea acestora, moment în care se returnează False.
Funcția principală se ocupă de interacțiunea cu utilizatorul și afișează rezultatul final în funcție de valorile returnate de funcțiile anterioare. Se citeste numarul de la tastatură (n = int(input("Introduceti un numar natural: "))) și se verifică dacă datele introduse sunt corecte folosind funcția verificare_numar(n). Dacă datele sunt corecte, se afișează mesajul corespunzător (print("Datele introduse sunt corecte.")) și se verifică dacă numărul este "alipit" folosind funcția este_alipit(n). În funcție de rezultatul obținut, se afișează mesajul "DA" sau "NU". Dacă datele introduse nu sunt corecte, se afișează mesajul corespunzător (`print("Datele introduse nu sunt corecte.").