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
1945 - Benzinarii
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/1945/benzinarii] ---- == Cerinţa == Gigel, mare pasionat de jocuri merge cu tatăl său în excursie. Pe drum acesta adoarme și devine personaj principal într-o cursă de mașini. În visul său este pilot de formula 1 în jocul '''Need for Speed'''! Observă că benzina e pe sfârșite! Trebuie să alimenteze urgent de la o benzinărie dar acestea “apar” numai când kilometrajul mașinii este un număr palindromic (citit în ambele sensuri este la fel).<br> Se uită spre kilometraj și trebuie să decidă repede: merge înainte spre următoarea stație de benzină sau se întoarce spre stația de benzină anterioară. Dacă benzinăriile sunt la distanțe egale, Gigel va merge înainte. Dacă kilometrajul mașinii indică deja un număr palindromic, ratează această benzinărie, nemaiputând opri la timp (are viteză mare) și caută o soluție: altă benzinărie.<br> Atenție, kilometrajul mașinii în momentul sosirii la benzinărie nu este obligatoriu un număr palindromic (de exemplu, când Gigel se întoarce din drum).<br><br>Presat de timp, Gigel vă roagă să îl ajutați să găsească distanța minimă până la cea mai apropiată benzinărie (numărul palindromic cel mai apropiat) și cât va indica kilometrajul atunci când va sosi la benzinărie. == Date de intrare == Fișierul de intrare '''benzinarii.in''' conține o singură valoare '''n''' reprezentând kilometrajul mașinii afișat în momentul în care se uită Gigel spre acesta. == 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 '''benzinarii.out''' va conține o singură linie cu două numere, reprezentând distanța până la cea mai apropiată benzinărie (număr palindromic), respectiv kilometrajul cu care va sosi la benzinărie. În caz contrar, pe ecran se va afișa: '''"Datele nu au fost introduse corect."''' == Restricţii şi precizări == * '''1 <= n <= 100.000.000'''. * numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât '''1.000.000.000''' == Exemple == ===Exemplul 1=== ; benzinarii.in : 456 ; Ecran : Datele sunt introduse corect. ; benzinarii.out : 2 458 ===Exemplul 2=== ; benzinarii.in : 1998 ; Ecran : Datele sunt introduse corect. ; benzinarii.out : 4 2002 ===Exemplul 3=== ; benzinarii.in : 4774 ; Ecran : Datele sunt introduse corect. ; benzinarii.out : 110 4884 == Rezolvare == <syntaxhighlight lang="python" line> # 1945 def este_palindrom(numar): return str(numar) == str(numar)[::-1] def gaseste_benzinarii(n): if n < 1 or n > 100000000: print("Datele nu au fost introduse corect.") return print("Datele sunt introduse corect.") distanta_minima = float('inf') km_benzinarii = 0 # cautam benzinariile inainte for i in range(n+1, 100000001): if este_palindrom(i): distanta = i - n if distanta < distanta_minima: distanta_minima = distanta km_benzinarii = i break # cautam benzinariile inapoi for i in range(n-1, 0, -1): if este_palindrom(i): distanta = n - i if distanta <= distanta_minima: distanta_minima = distanta km_benzinarii = i break print(distanta_minima, km_benzinarii) if __name__ == '__main__': with open('benzinarii.in', 'r') as f: n = int(f.readline()) gaseste_benzinarii(n) </syntaxhighlight> == Explicație rezolvare == Funcția '''este_palindrom''' primește un număr și returnează '''True''' dacă este palindrom și '''False''' în caz contrar. Am convertit numărul într-un șir de caractere și l-am comparat cu el însuși inversat (str(numar)[::-1]).<br><br>Funcția '''gaseste_benzinarii''' primește kilometrajul mașinii '''n''' și calculează distanța până la cea mai apropiată benzinărie și kilometrajul la care va ajunge Gigel. Mai întâi verificăm dacă datele sunt introduse corect (în conformitate cu restricțiile din enunț) și apoi căutăm benzinariile înainte și înapoi. Pentru fiecare direcție, am utilizat un ciclu '''for''' care parcurge numerele de la kilometrajul mașinii până la 100.000.000 într-un caz și până la 0 în celălalt caz. Pentru fiecare număr verificăm dacă este palindrom și calculăm distanța față de kilometrajul mașinii. Dacă distanța este mai mică decât distanța minimă găsită până acum, actualizăm distanța minimă și kilometrajul benzinăriei.<br><br>În funcția main citim kilometrajul mașinii din fișierul de intrare și apelăm funcția '''gaseste_benzinarii'''.
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