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
v[i] = nodul ascendent nodului i
Exemplu : Fie arborele cu 6 noduri cu muchiile 1-2, 1-3, 2-6, 3-4, 3-5.
Vectorul de tati este : 0 1 1 3 3 2
Răspunsuri la întrebare
#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);
}