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

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


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

सूत्र है: max(branch[i]/m - skill[i]/n)।

branch[i] के मानों का योग m होता है। हमें branch[i] में तत्वों को ढूंढना है।

उदाहरण के लिए, यदि इनपुट k = 5, n = 10, m = 25, skill = {5, 3, 2, 7, 4} है, तो आउटपुट 12 7 5 17 10 होगा।

चरण

इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे:

sum := 0 i := 0 से k-1 तक, करें: skill[i] := skill[i] * m / n पूर्णांक युग्मों वाला एक ऐरे a परिभाषित करें i := 0 से k-1 तक, करें: c := skill[i] sum := sum + c a[i] का पहला मान := skill[i] - c a[i] का दूसरा मान := i ऐरे a को सॉर्ट करें ऐरे a को उलट दें i := 0 से m - sum - 1 तक, करें: skill[a[i] का दूसरा मान] := skill[a[i] का दूसरा मान] + 1 i := 0 से k-1 तक, करें: यदि i, k - 1 के बराबर नहीं है, तो: print(skill[i]) अन्यथा, 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++ प्रोग्राम ग्राफ में सुपर वर्टेक्स खोजने का C++ प्रोग्राम

    मान लीजिए n वर्टेक्स वाला एक ग्राफ दिया गया है। वर्टेक्स 1 से n तक संख्याबद्ध हैं और edges सरणी में दी गई एज्स से जुड़े हैं। प्रत्येक वर्टेक्स का एक x मान है जो 1 से n के बीच होता है, यह values सरणी में दिया गया है। हमें ग्राफ में सुपर वर्टेक्स खोजने हैं। एक वर्टेक्स i को सुपर वर्टेक्स कहा जाता है

  1. ग्रिड में रोशन सेल्स की संख्या ज्ञात करने का C++ प्रोग्राम ग्रिड में रोशन सेल्स की संख्या ज्ञात करने का C++ प्रोग्राम

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

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

    मान लीजिए n वर्टेक्स और m एज वाला एक अनभारित, निदेश रहित ग्राफ दिया गया है। ग्राफ में एक ब्रिज एज वह एज है जिसे हटाने से ग्राफ असंबद्ध हो जाता है। हमें दिए गए ग्राफ में ऐसी एज की संख्या ज्ञात करनी है। ग्राफ में समानांतर एज या सेल्फ-लूप नहीं हैं। उदाहरण के लिए, यदि इनपुट है n = 5, m = 6, edges = {{1