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

C++ में सापेक्ष रैंक


समस्या विवरण

मान लीजिए हमारे पास N एथलीट्स के स्कोर की सूची है, हमें उनकी सापेक्ष रैंक ज्ञात करनी है और शीर्ष तीन उच्चतम स्कोर वाले लोगों को अलग-अलग पदक मिलेंगे: "Gold", "Silver" और "Bronze"।

उदाहरण

यदि इनपुट है: [2,5,3,1,0], तो आउटपुट होगा [Bronze, Gold, Silver, 4, 5]

हल करने का दृष्टिकोण

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

  • यदि nums का आकार 1 है, तो "Gold" लौटाएं
  • यदि nums का आकार 2 है:
    • यदि nums[0] > nums[1], तो "Gold", "Silver" लौटाएं
    • अन्यथा "Silver", "Gold" लौटाएं
  • एक सरणी v परिभाषित करें
  • एक सरणी vec परिभाषित करें
  • i := 0 से आरंभ करें, जब i < nums का आकार, i को 1 से बढ़ाते हुए:
    • nums[i] को v के अंत में डालें
  • सरणी v को सॉर्ट करें
  • सरणी v को रिवर्स करें
  • एक मैप mp परिभाषित करें
  • यदि nums का आकार > 2:
    • {v[0], "Gold"} को mp में डालें
    • {v[1], "Silver"} को mp में डालें
    • {v[2], "Bronze"} को mp में डालें
    • i := 3 से आरंभ करें, जब i < v का आकार, i को 1 से बढ़ाते हुए:
      • {v[i], i+1 को स्ट्रिंग में} को mp में डालें
    • i := 0 से आरंभ करें, जब i < nums का आकार, i को 1 से बढ़ाते हुए:
      • mp[nums[i]] को vec के अंत में डालें
  • vec लौटाएं

C++ कार्यान्वयन

#include <bits/stdc++.h>
using namespace std;

void print_vector(vector<string> v) {
    cout << "[";
    for(int i = 0; i < v.size(); i++) {
        cout << v[i] << ", ";
    }
    cout << "]" << endl;
}

class Solution {
public:
    vector<string> findRelativeRanks(vector<int>& nums) {
        if (nums.size() == 1) {
            return { "Gold" };
        }
        if (nums.size() == 2) {
            if (nums[0] > nums[1])
                return { "Gold", "Silver" };
            else
                return { "Silver", "Gold" };
        }
        vector<int> v;
        vector<string> vec;
        for (int i = 0; i < nums.size(); i++)
            v.push_back(nums[i]);
        sort(v.begin(), v.end());
        reverse(v.begin(), v.end());
        map<int, string> mp;
        if (nums.size() > 2) {
            mp.insert({v[0], "Gold" });
            mp.insert({v[1], "Silver" });
            mp.insert({v[2], "Bronze" });
            for (int i = 3; i < v.size(); i++) {
                mp.insert({ v[i], to_string(i + 1) });
            }
            for (int i = 0; i < nums.size(); i++)
                vec.push_back(mp[nums[i]]);
        }
        return vec;
    }
};

int main() {
    Solution ob;
    vector<int> v = {2,5,3,1,0};
    print_vector(ob.findRelativeRanks(v));
    return 0;
}

इनपुट

{2,5,3,1,0}

आउटपुट

[Bronze, Gold, Silver, 4, 5, ]
  1. - C++ में Switch स्टेटमेंट: एक पूर्ण गाइड

    C++ में Switch स्टेटमेंट का उपयोग कैसे करें कंडीशनल स्टेटमेंट्स सभी प्रोग्रामिंग भाषाओं की एक सामान्य विशेषता हैं। इन स्टेटमेंट्स का उपयोग प्रोग्राम के प्रवाह को नियंत्रित करने और यह निर्दिष्ट करने के लिए किया जाता है कि कोड के विशिष्ट ब्लॉक्स कब निष्पादित होने चाहिए। C++ में उपयोग किए जाने वाले मुख

  1. - C++ में मितव्ययी संख्या (Frugal Number)

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया गया है। हमारा कार्य यह जांचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या (FRUGAL NUMBER) − एक संख्या जिसके अंकों की संख्या उस संख्या के अभाज्य गुणनखंडन में अंकों की संख्या से सख्ती से अधिक है। उदाहरण &

  1. C++ में पेंटाटोप संख्या C++ में पेंटाटोप संख्या

    एक पेंटाटोप संख्या को पास्कल के त्रिभुज में पांचवीं संख्या के रूप में वर्णित किया गया है। अब, चूंकि यह पांचवीं संख्या है, इसका मतलब है कि पास्कल के त्रिभुज में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है जो पास्कल के त्रिभुज की चौथी पंक्ति है। तो, इस