Informatică, întrebare adresată de Tudorica69, 9 ani în urmă

Vasile este patronul unei rafinării şi analizează ofertele primite de la producători de petrol din N ţări. Fiecare producător i (1 ≤i ≤N) specifică preţul unui baril de petrol în euro (ei) şi în dolari (di).
Vasile are E Euro şi D dolari. Fiindcă doreşte să evite complicaţiile birocratice, Vasile va achiziţiona petrol de la un producător fie plătind toată cantitatea achiziţionată în euro, fie plătind totul în dolari (dar nu şi în euro şi dolari).

Cerinţă

Cunoscând ofertele producătorilor, să se determine cantitatea maximă de petrol pe care o poate achiziţiona Vasile având E euro şi D dolari.

Date de intrare

Fişierul de intrare petrol.in conţine pe prima linie 3 numere naturale N, E şi D (numărul de producători, suma pe care o deţine Vasile în Euro şi respectiv suma pe care o deţine Vasile în dolari). Pe următoarele N linii sunt descrise ofertele producătorilor, câte o ofertă pe o linie. Pe linia i+1 este scrisă oferta producătorului i sub forma a două numere naturale ei di (preţul unui baril exprimat în euro şi respectiv în dolari). Numerele aflate pe aceeaşi linie sunt separate prin spaţiu.

Date de ieşire

Fişierul de ieşire petrol.out va conţine o singură linie pe care va fi scris un număr real cu cel puţin trei zecimale care reprezintă numărul de barili pe care îi poate achiziţiona Vasile (maxim posibil).

Restricţii

1 ≤ N ≤ 100
0 ≤ E, D ≤ 1000
1 ≤ ei, di ≤ 1000, pentru 1≤i≤N
Rezultatul afişat va fi considerat corect dacă diferenţa în valoare absolută dintre rezultatul corect şi cel afişat este < 0.01.

Exemplu:

petrol.in:
4 5 2
3 2
3 4
4 3
2 1

petrol.out:
3.667

Răspunsuri la întrebare

Răspuns de express
1
#include<cstdio>
#include<algorithm>
using namespace std;

int a[105],b[105],n,i,j;
float d,e,max;
int main()
{   
  freopen ("petrol.in" , "r" , stdin);
  freopen ("petrol.out" , "w" , stdout);
  scanf ("%d",&n);
  scanf ("%f %f",&d,&e);
  for(i=1;i<=n;i++) 
   {
scanf ("%d",&a[i]);
scanf ("%d",&b[i]);
}
 float max=0.0;
  if (n==1)
{
if (a[1]>b[1]) printf("%.3f\n",float(d/a[1]));
        else printf("%.3f\n",float(e/b[1]));
    }
   else
{
for (i=1;i<n;i++)
for (j=1;j<=n;j++)  
if (( ( float(d/a[i]) + float(e/b[j]) ) > max) && (i!=j))
max=(float(d/a[i])+float(e/b[j]));
}

  printf("%.3f\n",max); 
  return 0;
}

Alte întrebări interesante