Informatică, întrebare adresată de lilianacamelia75, 8 ani în urmă

Gigel primeşte o nouă provocare de la prietenul său Programatorul! Cunoscând înălţimile clădirilor aflate pe o anumită stradă, Gigel trebuie să răspundă rapid la întrebarea: “Care este gradul de vizibilitate al străzii?”

Gradul de vizibilitate al unei străzi este dat de raportul dintre numărul clădirilor vizibile din capătul stâng al străzii şi numărul total al clădirilor de pe stradă, raport calculat cu trei zecimale.

Cerința
Pentru o intersecţie de N străzi ajutaţi-l pe Gigel să determine gradul de vizibilitate al fiecărei străzi şi să precizeze care este strada cu grad maxim de vizibilitate.

Date de intrare
Fișierul de intrare strazi.in conține pe prima linie numărul de străzi N, apoi N linii corespunzătoare datelor celor N străzi. Pe linia K+1 (K>=1) din fişier sunt precizate: numărul de clădiri, apoi înălţimile acestor clădiri în ordinea parcurgerii străzii cu numărul K, de la stânga la dreapta.

Date de ieșire
Fișierul de ieșire strazi.out va conține pe primele N linii gradul de vizibilitate al străzilor, în ordinea crescătoare a indicilor de strada (linia X va conţine gradul de vizibilitate al străzii X, 1<=X<=N). Ultima linie din fişier va conţine indicele străzii cu grad maxim de vizibilitate. Dacă sunt mai multe străzi cu grad maxim de vizibilitate atunci va fi afişată strada cu indicele de ordine cel mai mic.

Restricții și precizări
1<=N<100
Numărul de clădiri de pe o stradă este mai mic decât 1000.
Înălţimea unei clădiri nu depăşeşte 105 m.



Exemplu
strazi.in

4
5 5.1 7.2 2.0 6.9 8.3
3 6.5 4.2 3.1
2 3.4 5.0
4 1.2 2.3 3.4 4.5
strazi.out

0.600
0.333
1.000
1.000
3
Explicație
Clădirile vizibile din partea stângă a primei străzi sunt cele cu înălţimile 5.1, 7.2 şi 8.3. Gradul de vizibilitate este 3/5=0.600
Pentru strada 2 este vizibilă o singură clădire, prima. Gradul de vizibilitate este 1/3=0.333
Pentru strada 3 sunt vizibile cele 2 clădiri. Gradul de vizibilitate este 2/2=1.000
Pentru strada 4 sunt vizibile toate clădirile. Gradul de vizibilitate este 4/4=1.000 Străzile 3 şi 4 are gradul de vizibilitate maxim dar va fi afişată strada cu indicele cel mai mic.

Răspunsuri la întrebare

Răspuns de pmarian98
1

Răspuns:

#include <iostream>

#include <fstream>

#include <iomanip>

 

using namespace std;

 

ifstream in ("strazi.in");

ofstream out ("strazi.out");

 

double a[105][1005];

double gradMax=0;

int lin = -1;

 

int main()

{

   int n, x=0;

   in >> n;

 

   for (int i=1; i<=n; i++)

   {

       in >> a[i][0];

       for (int j=1; j<=a[i][0]; j++)

           in >> a[i][j];

   }

 

   for (int i=1; i<=n; i++)

   {

       double max1=a[i][1];

       int nr=1;

       for (int j=2; j<=a[i][0]; j++)

       {

           if (a[i][j]>max1)

           {

               nr++;

               max1=a[i][j];

           }

       }

       

       float grad = (float)nr/a[i][0];

       out << fixed << setprecision(3) << grad << '\n';

       if (grad>gradMax)

       {

           gradMax = grad;

           lin = i;

       }

   }

   out << lin;

 

   return 0;

}

Explicație:


lilianacamelia75: Multumesc mult!
Alte întrebări interesante