Rezolvare completă PbInfo #1945 Benzinarii

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).

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.

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).

Cerința

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

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.

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

Exemplul 1

benzinarii.in

456

benzinarii.out

2 458

Explicație

Cele mai apropiate stații de benzină se găsesc la km: 454 și 464. Distanțele sunt d1=456-454=2 și d2=464-456=8 deci, este mai convenabil să se întoarcă la km 454. Va ajunge când mașina va avea kilometrajul 458.

Exemplul 2

benzinarii.in

1998

benzinarii.out

4 2002

Explicație

Cele mai apropiate stații de benzină se găsesc la km: 1991 și 2002. Este mai convenabil să meargă înainte 4 Km și va ajunge când mașina va avea kilometrajul 2002. (2002=1998+4)

Exemplul 3

benzinarii.in

4774

benzinarii.out

110 4884

Explicație

Kilometrajul inițial este un număr palindromic dar Gigel nu poate opri la această benzinărie. Cele mai apropiate stații de benzină se găsesc la km: 4664 și 4884. d1=4774-4664=110 iar d2=4884-4774=110. Benzinăriile sunt la distanțe egale și Gigel continuă drumul încă 110 Km până la benzinăria din dreptul numărului 4884; kilometrajul va fi 4884.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Benzinarii:

#include<iostream>
#include<fstream>
using namespace std;

ifstream fin("benzinarii.in");
ofstream fout("benzinarii.out");

int n,a,b, ogl, ca, cb, pal=0, dist, kilom;

int main()
{

fin>>n;

 a=n-1; b=n+1;
while(pal==0)
{
   ca=a; ogl=0;
   while(ca>0) {ogl=ogl*10+ca%10;  ca=ca/10;}
   if(ogl==a) pal=1;
   if (pal==0) a--;
}
pal=0;
while(pal==0)
{
   cb=b; ogl=0;
   while(cb>0) {ogl=ogl*10+cb%10;  cb=cb/10;}
   if(ogl==b) pal=1;
   if (pal==0) b++;
}

if((b-n)<=(n-a)) kilom=b; else { dist=n-a; kilom=n+dist;}



            if(dist==0) fout<<b-n<<<<kilom;
            else fout<<n-a<<<<kilom;

return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #1945 Benzinarii

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1945 Benzinarii de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!