Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ ค้นหาจำนวนพนักงานที่มีระดับทักษะต่างกันที่จะย้าย


สมมติว่ามีพนักงาน n คนในบริษัท พนักงานแต่ละคนจะได้รับอันดับตามทักษะของพวกเขา อันดับมีตั้งแต่ 1 ถึง k จำนวนพนักงานที่มีอันดับ i ถูกกำหนดในทักษะอาร์เรย์ โดยที่ skill[i] แทนจำนวนพนักงานที่มีอันดับ i ตอนนี้สาขาใหม่ของบริษัทได้เปิดขึ้นและพนักงานที่มีทักษะต่างกันไปสาขานั้น จำนวนพนักงานที่จะส่งไปยังสาขานั้นคือ m. เราต้องหาทางย้ายพนักงานจำนวน m ที่มีทักษะต่างกันไปสาขาใหม่นั้น เราต้องย่อสูตรต่อไปนี้ให้เล็กสุดเพื่อรับสาขาตารางการจัดสรรอันดับพนักงานของสาขา

สูตรคือ:max(branch[i]/m - skill[i]/n)

ผลรวมของค่าของกิ่ง[i] ให้ผลลัพธ์เป็น m เราต้องหาองค์ประกอบในสาขา[i].

ดังนั้น หากอินพุตเป็น k =5, n =10, m =25, skill ={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