Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Bitnami MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
1984 - Cifra 2
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
Sursa: [https://www.pbinfo.ro/probleme/1984/cifra2] ---- == Enunț == Cristian, elev în clasa a V-a, a primit o cutie cu ''numar'' bomboane. Chiar dacă i-ar plăcea, știe că nu este indicat să le mănânce pe toate imediat. L-a întrebat pe tatăl său câte bomboane are voie să mănânce și acesta i-a răspuns că poate mânca doar un număr sănătos de bomboane. Cristian a fost nedumerit. Tatăl i-a explicat că un număr sănătos este un număr natural care poate fi modificat, până se obține o singură cifră, prin eliminarea celei mai mici cifre din el și înlocuirea fiecărei cifre rămase în număr cu diferența dintre valoarea ei și cifra minimă. De exemplu, cifra minimă a numărului 3151 este 1 iar prin eliminarea ei din număr se obține 35, după care prin înlocuirea cifrelor rămase se obține 24 adică cifra 3 se înlocuiește cu cifra 2, cifra 5 cu 4, rezultând numărul 24; se continuă procedeul: cifra minimă a numărului 24 este 2 iar prin eliminarea ei din număr se obține 4, după care prin înlocuirea cifrei rămase se obține 2 moment în care a rămas o singură cifră. Așadar numărul sănătos obținut din 3151 este 2. Ajutați-l pe Cristian să afle câte bomboane are voie să mănânce. == Cerinţa == Scrieţi un program care să citească numărul natural '''numar''' şi care să determine: a. cifra minimă din numărul '''numar'''; (20% din punctaj) b. numărul obținut după prima transformare a numărului '''numar'''; (30% din punctaj) c. numărul sănătos obținut din '''numar'''. (50% din punctaj) == Date de intrare == Fișierul de intrare '''cifra2.in''' conține pe prima linie numărul natural '''numar'''. == Date de ieșire == Dacă datele sunt introduse corect, pe ecran se va afișa: '''"Datele sunt introduse corect."''', apoi, fișierul de ieșire '''cifra2.out''' va conține cele trei valori cerute, fiecare pe câte un rând.. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: '''"Datele nu corespund restricțiilor impuse."''''. == Restricţii şi precizări == * '''10''' < '''n''' ≤ '''1000000''' * Testele vor conține doar numere '''numar''' care pot fi modificate conform cerinței. == Exemple == ===Exemplul 1=== ; cifra2.in : 736191 ; Ecran : Datele sunt introduse corect. ; cifra2.out : 1 : 6258 : 2 <br> == Explicație == a. cifra minimă este '''1''' b. '''736191 → 7369 → 6258''' c. '''6258 → 658 → 436''', se continuă '''436 → 46 → 13''', se continuă '''13 → 3 → 2'''. == Rezolvare == <syntaxhighlight lang="python" line> # 1984 def cifra_minima(numar): cifra_min = 9 while numar > 0: cifra = numar % 10 if cifra < cifra_min: cifra_min = cifra numar //= 10 return cifra_min def transformare_numar(numar): cifra_min = cifra_minima(numar) nou_numar = 0 while numar > 0: cifra = numar % 10 if cifra != cifra_min: noua_cifra = abs(cifra - cifra_min) nou_numar = noua_cifra * (10 ** len(str(nou_numar))) + nou_numar numar //= 10 return nou_numar def numar_sanatos(numar): while numar > 9: numar = transformare_numar(numar) return numar def main(): with open("cifra2.in") as f: numar = int(f.readline().strip()) if numar <= 10 or numar > 1000000: print("Datele nu corespund restricțiilor impuse.") return numar_initial = numar while numar > 9: cifra_min = cifra_minima(numar) if cifra_min == 0: print("Datele nu corespund restricțiilor impuse.") return numar = transformare_numar(numar) with open("cifra2.out", "w") as f: f.write("Datele sunt introduse corect.\n") f.write(str(cifra_minima(numar_initial)) + "\n") f.write(str(transformare_numar(numar_initial)) + "\n") f.write(str(numar) + "\n") if __name__ == '__main__': main() </syntaxhighlight> == Explicație rezolvare == Funcția '''"cifra_minima(numar)"''' determină cifra minimă a unui număr întreg pozitiv. În timp ce '''"transformare_numar(numar)"''' primește un număr întreg pozitiv și îl transformă într-un alt număr în care fiecare cifră diferă de cifra minimă a numărului inițial cu un anumit număr. Apoi, funcția '''"numar_sanatos(numar)"''' aplică funcția '''"transformare_numar"''' pe numărul dat repetat până când numărul ajunge să aibă o singură cifră. În cele din urmă, funcția '''"main"''' citeste un număr dintr-un fișier, verifică dacă respectă anumite restricții, apoi aplică funcțiile '''"cifra_minima"''' și '''"transformare_numar"''' și scrie rezultatele într-un fișier de ieșire.
Summary:
Please note that all contributions to Bitnami MediaWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Bitnami MediaWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width