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

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


Mghetes: ce inseamna data printr-un vector de tip tata?
Mghetes: cred ca tine de modul cum citesti si stochezi datele, dar ar ajuta un exemplu daca ai, sa imi dau seama
andrei750238: Intr-un arbore, un vector de tip tata memoreaza nodul ascendent fiecarui nod, mai putin radacina care are valoarea 0.
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
andrei750238: Eu am o alta intrebare. Salariul "de baza" e acelasi pentru toti angajatii (la care se adauga "sporul" sefului), sau fiecare angajat are salariu de baza diferit (care trebuie citit) ?
Mghetes: eu inteleg ca trebuie citit, fiecare are un salariu specific
Mghetes: mersi de explicatii la vectorul de tip tata, am uitat de cand n-am mai facut
andrei750238: Cu placere

Răspunsuri la întrebare

Răspuns de andrei750238
0

#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);

}

Anexe:

andrei750238: https://pastebin.com/FNXPDQ99
Alte întrebări interesante