Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ प्रोग्राम स्थानांतरित किए जाने वाले विभिन्न कौशल स्तर के कर्मचारियों की संख्या का पता लगाने के लिए

मान लीजिए, एक कंपनी में n कर्मचारी हैं। प्रत्येक कर्मचारी को उनके कौशल के आधार पर रैंक दी जाती है। रैंक 1 से k तक गिने जाते हैं। रैंक I वाले कर्मचारियों की संख्या सरणी कौशल में दी गई है, जहां कौशल [i] रैंक i वाले कर्मचारियों की संख्या का प्रतिनिधित्व करता है। अब, कंपनी की एक नई शाखा खुल गई है और विभिन्न कौशल के कर्मचारियों को उस शाखा में ले जाना है। उस शाखा में भेजे जाने वाले कर्मचारियों की संख्या m है। हमें कोई रास्ता निकालना होगा ताकि हम विभिन्न कौशल के कर्मचारियों को उस नई शाखा में स्थानांतरित कर सकें। शाखा की कर्मचारी रैंक आवंटन तालिका शाखा प्राप्त करने के लिए हमें निम्न सूत्र को कम करना होगा।

फ़ॉर्मूला है:अधिकतम (शाखा[i]/m - कौशल[i]/n).

शाखा [i] के मानों का योग m में परिणत होता है। हमें शाखा में तत्वों का पता लगाना है [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

  1. C++ प्रोग्राम ग्राफ में सुपर वर्टिस का पता लगाने के लिए

    मान लीजिए, हमें एक ग्राफ दिया गया है जिसमें n शीर्ष हैं। कोने 1 से n तक गिने जाते हैं, और वे सरणी किनारों में दिए गए किनारों से जुड़े होते हैं। प्रत्येक शीर्ष का 1 से n तक की संख्या के भीतर x मान होता है जो कि सरणी मान में दिया जाता है। अब, हमें ग्राफ से अति शीर्षों का पता लगाना है। एक शीर्ष i को सु

  1. C++ प्रोग्राम एक ग्रिड में प्रबुद्ध कोशिकाओं की संख्या का पता लगाने के लिए

    मान लीजिए, हमें h * w आयामों का एक ग्रिड दिया गया है। ग्रिड में कोशिकाओं में या तो बल्ब या बाधाएं हो सकती हैं। एक लाइट बल्ब सेल स्वयं को और उसके दाएं, बाएं, ऊपर और नीचे की कोशिकाओं को रोशन करता है और प्रकाश कोशिकाओं के माध्यम से चमक सकता है जब तक कि कोई बाधा सेल प्रकाश को अवरुद्ध न करे। एक बाधा सेल

  1. C++ प्रोग्राम दिए गए ग्राफ़ में ब्रिज किनारों की संख्या का पता लगाने के लिए

    मान लीजिए, हमें एक अभारित, अप्रत्यक्ष ग्राफ दिया गया है जिसमें n कोने और m किनारे हैं। ग्राफ़ में ब्रिज का किनारा वह किनारा होता है जिसके हटाने से ग्राफ़ डिस्कनेक्ट हो जाता है। हमें दिए गए आलेख में ऐसे आलेखों की संख्या ज्ञात करनी है। ग्राफ़ में समानांतर किनारे या सेल्फ़-लूप नहीं होते हैं। इसलिए, यद