În parcările din Iași, intrarea în parcare este permisă dacă șoferul care dorește să parcheze solicită acest lucru.
Solicitarea se face prin apăsarea unui buton la automatul aflat la intrarea în parcare, acțiune care are ca efect eliberarea unui tichet de parcare și deschiderea barierei. Pe tichet sunt trecute data și ora intrării în parcare.
La plecare, șoferul scanează tichetul la automatul de plată. În urma scanării automatul calculează şi afișează suma de plată. Calculul sumei se face astfel:
se citește de la ceasul automatului data și ora plecării
se calculează diferența de timp dintre ora plecării și ora intrării în parcare
diferența calculată se rotunjește la număr întreg de ore, în sus
se înmulțește timpul exprimat în ore cu tariful orar
Cerința
Cunoscându-se data și ora intrării în parcare, data și ora plecării din parcare și tariful orar, să se determine timpul cât a stat mașina în parcare și suma de plată.
Date de intrare
Fişierul de intrare parcare.in conţine pe prima linie data și ora intrării în parcare, separate printr-un spațiu, sub forma zz ll hh mm.
Pe linia a doua a fişierului de intrare se găsesc data și ora plecării din parcare, separate printr-un spațiu, sub forma zz ll hh mm.
Linia a treia conţine un număr natural t reprezentând tariful orar exprimat în lei.
Pe linia a patra a fișierului de intrare se găsește una dintre valorile 1 sau 2 reprezentând cerinţa: 1, dacă se cere determinarea timpului cât a stat mașina în parcare, timp exprimat în minute, respectiv 2, dacă se cere determinarea sumei de plată pentru parcare.
Date de ieșire
Fişierul de ieşire parcare.out conţine pe prima linie o valoarea naturală reprezentând timpul cât mașina a stat în parcare, exprimat în minute, dacă cerinţa a fost 1, respectiv suma de plată, dacă cerinţa a fost 2.
Restricții și precizări
Mașina stă în parcare cel puţin 1 minut dar nu poate sta mai mult de 7 zile.
Dacă timpul de staţionare nu depăşeşte 15 minute, nu se percepe taxă.
Cele două date sunt din același an, care nu este bisect.
Minutul de plecare din parcare nu se contorizează.
Minutele unei ore sunt numerotate de la 0 la 59.
1 <= t <= 100
Pentru cerinţa 1 se acordă 50% din punctaj, iar pentru cerinţa 2 se acordă încă 50% din punctaj.
Exemplul 1
parcare.in
30 01 17 33
30 01 21 01
3
1
parcare.out
208
Explicație
Intrarea în parcare s-a făcut în data de 30 ianuarie ora 17:33. Plecarea s-a făcut în aceeași zi la ora 21:01. Deci timpul cât mașina a stat în parcare este 27 + 3*60 + 1 = 208 minute
Exemplu 2
parcare.in
30 01 17 33
30 01 21 01
3
2
parcare.out
12
Explicație
Tariful orar este 3 lei/oră. Se deduce că 208 minute = 3 ore și 28 minute, deci se plătesc 4 ore, 4 * 3 = 12.
Va rog!Dau coroana!
Răspunsuri la întrebare
Răspuns de
7
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream f("parcare.in");
ofstream g("parcare.out");
int zz_intrare,zz_iesire,oo_intrare,oo_iesire,ll_intrare,ll_iesire,mm_intrare,mm_iesire,tariful,valoare,suma_de_platit;
f>>zz_intrare>>ll_intrare>>oo_intrare>>mm_intrare;
f>>zz_iesire>>ll_iesire>>oo_iesire>>mm_iesire;
f>>tariful;
//citesc cerinta
f>>valoare;
int ziua_total,oo_total,mm_total;
int aux;
//aux pentru a converti orele in minute
if(valoare==1)
{
//calculez nr de zile
ziua_total=zz_iesire-zz_intrare;
if(ziua_total==0)
{
oo_total=oo_iesire-oo_intrare;
//Transform orele in minute;
aux=oo_total/60;
//calculez timpul total
mm_total=aux-(mm_intrare-mm_iesire);
g<<mm_total;
}
else
{
aux=ziua_total*24;
oo_total=aux+(oo_iesire-oo_intrare);
mm_total=(oo_total*60)+(mm_iesire-mm_intrare);
g<<mm_total;
}
}
else
{
if((zz_intrare==zz_iesire && oo_intrare==oo_iesire) && (mm_intrare-mm_iesire<=15))
{
g<<"0";
}
else{
//Avem nevoie sa calculam timpul sederii intrucat nu putem deduce plata fara timp
//calculez nr de zile
ziua_total=zz_iesire-zz_intrare;
if(ziua_total==0)
{
oo_total=oo_iesire-oo_intrare;
//Transform orele in minute;
aux=oo_total*60;
//calculez timpul total
mm_total=aux-(mm_intrare-mm_iesire);
}
else
{
aux=ziua_total*24;
oo_total=aux+(oo_iesire-oo_intrare);
mm_total=(oo_total*60)+(mm_iesire-mm_intrare);
}
//Daca avem minute in plus trecem la ora urm altfel nu
if(mm_total%60!=0)
{
mm_total=mm_total/60+1;
}
else
{
mm_total=mm_total/60;
}
//determin plata si o afisez
suma_de_platit=mm_total*tariful;
g<<suma_de_platit;
}
}
return 0;
}
#include <fstream>
using namespace std;
int main()
{
ifstream f("parcare.in");
ofstream g("parcare.out");
int zz_intrare,zz_iesire,oo_intrare,oo_iesire,ll_intrare,ll_iesire,mm_intrare,mm_iesire,tariful,valoare,suma_de_platit;
f>>zz_intrare>>ll_intrare>>oo_intrare>>mm_intrare;
f>>zz_iesire>>ll_iesire>>oo_iesire>>mm_iesire;
f>>tariful;
//citesc cerinta
f>>valoare;
int ziua_total,oo_total,mm_total;
int aux;
//aux pentru a converti orele in minute
if(valoare==1)
{
//calculez nr de zile
ziua_total=zz_iesire-zz_intrare;
if(ziua_total==0)
{
oo_total=oo_iesire-oo_intrare;
//Transform orele in minute;
aux=oo_total/60;
//calculez timpul total
mm_total=aux-(mm_intrare-mm_iesire);
g<<mm_total;
}
else
{
aux=ziua_total*24;
oo_total=aux+(oo_iesire-oo_intrare);
mm_total=(oo_total*60)+(mm_iesire-mm_intrare);
g<<mm_total;
}
}
else
{
if((zz_intrare==zz_iesire && oo_intrare==oo_iesire) && (mm_intrare-mm_iesire<=15))
{
g<<"0";
}
else{
//Avem nevoie sa calculam timpul sederii intrucat nu putem deduce plata fara timp
//calculez nr de zile
ziua_total=zz_iesire-zz_intrare;
if(ziua_total==0)
{
oo_total=oo_iesire-oo_intrare;
//Transform orele in minute;
aux=oo_total*60;
//calculez timpul total
mm_total=aux-(mm_intrare-mm_iesire);
}
else
{
aux=ziua_total*24;
oo_total=aux+(oo_iesire-oo_intrare);
mm_total=(oo_total*60)+(mm_iesire-mm_intrare);
}
//Daca avem minute in plus trecem la ora urm altfel nu
if(mm_total%60!=0)
{
mm_total=mm_total/60+1;
}
else
{
mm_total=mm_total/60;
}
//determin plata si o afisez
suma_de_platit=mm_total*tariful;
g<<suma_de_platit;
}
}
return 0;
}
stassahul:
Cam ii da 55pcte :O. Ai gresit undeva. Cu o greseala te ajut, nu controlezi daca timpul total e mai mic de 15 minute. "Dacă timpul de staţionare nu depăşeşte 15 minute, nu se percepe taxă."
Răspuns de
10
#include <fstream>
using namespace std;
ifstream fin("parcare.in");
ofstream fout("parcare.out");
int z1,z2,l1,l2,h1,h2,m1,m2,t,o;
int rz,rh,rm,rt,sum;
int main()
{
fin >> z1 >> l1 >> h1 >> m1;
fin >> z2 >> l2 >> h2 >> m2;
fin >> t;
fin >> o;
if(z2<z1)
{
if(l1==1 or l1==3 or l1==5 or l1==7 or l1==8 or l1==10 or l1==12)
rz=z2+31-z1;
else if(l1==4 or l1==6 or l1==9 or l1==11)
rz=z2+30-z1;
else if(l1==2)
rz=z2+28-z1;
}
else rz=z2-z1;
if(h2<h1)
{
rz--;
if(m2>=m1) rh=h2+24-h1;
else if(m2<m1) rh=h2+24-h1-1;
}
else
{
if(m2>=m1) rh=h2-h1;
else if(m2<m1) rh=h2-h1-1;
}
if(m2<m1) rm=m2+60-m1;
else if(m2>=m1) rm=m2-m1;
rt=rz*1440+rh*60+rm;
if(o==1) fout << rt;
else if(o==2)
{
if(rt<15) fout << "0";
else
{
if(rt%60==0) sum=(rt/60)*t;
else sum=(rt/60+1)*t;
fout << sum;
}
}
return 0;
}
using namespace std;
ifstream fin("parcare.in");
ofstream fout("parcare.out");
int z1,z2,l1,l2,h1,h2,m1,m2,t,o;
int rz,rh,rm,rt,sum;
int main()
{
fin >> z1 >> l1 >> h1 >> m1;
fin >> z2 >> l2 >> h2 >> m2;
fin >> t;
fin >> o;
if(z2<z1)
{
if(l1==1 or l1==3 or l1==5 or l1==7 or l1==8 or l1==10 or l1==12)
rz=z2+31-z1;
else if(l1==4 or l1==6 or l1==9 or l1==11)
rz=z2+30-z1;
else if(l1==2)
rz=z2+28-z1;
}
else rz=z2-z1;
if(h2<h1)
{
rz--;
if(m2>=m1) rh=h2+24-h1;
else if(m2<m1) rh=h2+24-h1-1;
}
else
{
if(m2>=m1) rh=h2-h1;
else if(m2<m1) rh=h2-h1-1;
}
if(m2<m1) rm=m2+60-m1;
else if(m2>=m1) rm=m2-m1;
rt=rz*1440+rh*60+rm;
if(o==1) fout << rt;
else if(o==2)
{
if(rt<15) fout << "0";
else
{
if(rt%60==0) sum=(rt/60)*t;
else sum=(rt/60+1)*t;
fout << sum;
}
}
return 0;
}
Alte întrebări interesante
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă