👤

Intr-o firma sunt n angajati, numerotati de la 1 la n, fiecare angajat avand un singur sef direct, cu exceptia directorului, care nu are sef. Ierarhia firmei este data printr-un vector de tip tata. Fiecare angajat al firmei are un salariu dat printr-un numar natural. Angajatii si seful sunt recompensati astfel: castigul fiecarui salariat este egal cu salariul sau la care se adauga media aritmetica a castigurilor subordonatilor sai directi. Media aritmetica se rotunjeste prin adaos la un numar intreg (de exemplu 5.33 se rotunjeste la 6). Angajatii care nu au subordonati directi castiga doar salariul. Calculati care este castigul directorului firmei. in c++ va rog frumos dau coroana ca fiind cel mai bun raspuns de nota 10

Răspuns :

#include <iostream>

#include <cmath>

using namespace std;

int n, v[100];

int salariu[100];

int media(float suma, float nr){

//Determina media in functie de suma si de numar

//Daca numarul e 0 atunci returneaza 0

if(nr==0) return 0;

//Altfel returneaza media aproximata dupa cerinta

return ceil(suma/nr);

}

int castig(int x){

//Determina in mod recursiv salariul angajatului X

//Determina media castigului subordonatilor :

int i, s=0, nr=0;

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

 if(v[i]==x){

  s+=castig(i);

  nr++;

 }

}

//Returneaza castigul total, adaugand media castigului angajatiolor la salariul de baza

return salariu[x] + media(s,nr);

}

int main(){

int director=0;

//Citeste numarul de angajatilor

cout << "\nNr angajati : ";

cin >> n;

//Citeste vector de tati, determina cine e director

cout << "\nVectori tati : ";

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

 cin >> v[i];

 //Verifica daca e director

 if(v[i]==0) director = i;

}

//Citeste salariul de baza a fiecarui angajat

cout << "\nVector salariu : ";

for(int i=1;i<=n;i++) cin >> salariu[i];

//Apeleaza functia pentru a calcula venitul directorului

cout << "\nVenit director : " << castig(director);

}

Vezi imaginea Andrei750238