Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

이직할 직원 수를 알아보는 C++ 프로그램

<시간/>

회사에 n명의 직원이 있다고 가정합니다. 각 직원은 능력에 따라 등급이 부여됩니다. 순위는 1에서 k까지 번호가 매겨집니다. 순위 i를 가진 직원의 수는 배열 기술에 주어집니다. 여기서 기술[i]은 순위 i를 가진 직원의 수를 나타냅니다. 이제 회사의 새로운 지점이 열렸고 다양한 기술의 직원을 해당 지점으로 이동해야 합니다. 해당 지점으로 보낼 직원 수는 m입니다. 다른 기술을 가진 m명의 직원을 새 지점으로 옮길 수 있는 방법을 찾아야 합니다. 지점의 직원 순위 할당 테이블 지점을 얻으려면 다음 공식을 최소화해야 합니다.

공식은 다음과 같습니다. max(branch[i]/m - Skill[i]/n).

branch[i] 값의 합은 m입니다. branch[i]에서 요소를 찾아야 합니다.

따라서 입력이 k =5, n =10, m =25, 기술 ={5, 3, 2, 7, 4}인 경우 출력은 12 7 5 17 10이 됩니다.

단계

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

sum := 0
for initialize i := 0, when i < k, update (increase i by 1), do:
   skill[i] := skill[i] * m / n
Define an array a containing integer pairs
for initialize i := 0, when i < k, update (increase i by 1), do:
   c := skill[i]
   sum := sum + c
   first value of a[i] := skill[i] - c
   second value of a[i] := i
sort the array a
reverse the array a
for initialize i := 0, when i < m - sum, update (increase i by 1), do:
   skill[second value of a[i]] := skill[second value of a[i]] + 1
for initialize i := 0, when i < k, update (increase i by 1), do:
   if i is not equal to k - 1, then:
      print(skill[i])
   Otherwise,
      print(skill[i])

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;

void solve(int k, int n, int m, vector<double> skill){
   int sum = 0;
   for (int i = 0; i < k; i++)
      skill[i] = skill[i] * m / n;
   vector<pair<double, int>> a(k);
   for (int i = 0; i < k; i++) {
      int c = skill[i];
      sum += c;
      a[i].first = skill[i] - c;
      a[i].second = i;
   }
   sort(a.begin(), a.end());
   reverse(a.begin(), a.end());
   for (int i = 0; i < m - sum; i++) {
      skill[a[i].second] += 1;
   }
   for (int i = 0; i < k; i++) {
      if (i != k - 1)
         cout << int(skill[i]) << " ";
      else
         cout << int(skill[i]) << endl;
   }
}
int main() {
   int k = 5, n = 10, m = 25;
   vector<double> skill = {5, 3, 2, 7, 4};
   solve(k, n, m, skill);
   return 0;
}

입력

5, 10, 25, {5, 3, 2, 7, 4}

출력

12 7 5 17 10