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

C++ में कार्ड फ्लिपिंग गेम


मान लीजिए एक टेबल पर N कार्ड हैं, जिनके दोनों तरफ एक सकारात्मक पूर्णांक प्रिंटेड है (संभवतः अलग)। हमें किसी भी संख्या में कार्ड्स को फ्लिप करना है, और उसके बाद हम एक कार्ड चुनते हैं। यदि चुने गए कार्ड के पीछे की तरफ संख्या X किसी भी कार्ड के सामने नहीं है, तो संख्या X को अच्छा माना जाता है। हमें सबसे छोटी संख्या ढूंढनी है जो अच्छी है? जब कोई संख्या अच्छी नहीं है, तो 0 लौटाएं। यहां, fronts[i] और backs[i] कार्ड i के सामने और पीछे की तरफ की संख्या को दर्शाते हैं। एक फ्लिप सामने और पीछे की संख्याओं को स्वैप कर देगा, इसलिए सामने का मान अब पीछे है और इसके विपरीत।

तो यदि इनपुट fronts = [1,2,4,4,7] और backs = [1,3,4,1,3] जैसा है, तो आउटपुट 2 होगा। तो यदि हम दूसरे कार्ड को फ्लिप करते हैं, तो सामने का मान [1,3,4,4,7] होगा, और पीछे [1,2,4,1,3] होगा। हम दूसरे कार्ड को चुनेंगे, जिसके पीछे संख्या 2 है, और यह किसी भी कार्ड के सामने नहीं है, इसलिए 2 एक अच्छी संख्या है।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एक सेट s परिभाषित करें, n := fronts का आकार, ret := inf
  • i को 0 से n - 1 की रेंज में
    • यदि fronts[i] = back[i], तो fronts[i] को s में डालें
  • i को 0 से n - 1 की रेंज में
    • यदि fronts[i] सेट में है तो ret := ret और fronts[i] का न्यूनतम
  • i को 0 से n - 1 की रेंज में
    • यदि backs[i] सेट में नहीं है तो ret := ret और backs[i] का न्यूनतम
  • ret = inf होने पर 0 लौटाएं, अन्यथा ret।

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

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

class Solution {
public:
    int flipgame(vector<int>& fronts, vector<int>& backs) {
        set <int> s;
        int n = fronts.size();
        int ret = INT_MAX;
        for(int i = 0; i < n; i++){
            if(fronts[i] == backs[i])s.insert(fronts[i]);
        }
        for(int i = 0; i <n; i++ ){
            if(s.count(fronts[i]) == 0) ret = min(ret, fronts[i]);
        }
        for(int i = 0; i <n; i++ ){
            if(s.count(backs[i]) == 0) ret = min(ret, backs[i]);
        }
        return ret == INT_MAX? 0 : ret;
    }
};

main(){
    vector<int> v1 = {1,2,4,4,7};
    vector<int> v2 = {1,3,4,1,3};
    Solution ob;
    cout << (ob.flipgame(v1, v2));
}

इनपुट

[1,2,4,4,7] [1,3,4,1,3]

आउटपुट

2

  1. C++ में जंप गेम IV C++ में जंप गेम IV

    मान लीजिए हमारे पास arr नामक पूर्णांकों की एक सरणी है। हम प्रारंभ में इंडेक्स 0 पर हैं। एक चरण में हम इंडेक्स i से i + x पर कूद सकते हैं जहां: i + x = 0, j जहां: arr[i] और arr[j] समान हैं और i और j समान नहीं हैं। यहां n सरणी का आकार है। हमें सरणी के अंतिम इंडेक्स तक पहुंचने के लिए न्यूनतम चरणों की स

  1. C++ में जंप गेम V C++ में जंप गेम V

    मान लीजिए हमारे पास arr नामक पूर्णांकों की एक सरणी और एक पूर्णांक d है। एक चरण में हम इंडेक्स i से कूद सकते हैं: i + x जहां: i + x < n और x की सीमा 1 से d है। = 0 और x की सीमा 1 से d है। arr[k] हो। हम सरणी के किसी भी इंडेक्स से कूदना शुरू कर सकते हैं। हमें अधिकतम इंडेक्स की संख्या ज्ञात करनी है ज

  1. - C++ में स्टोन गेम (Stone Game)

    मान लीजिए दो खिलाड़ी एलेक्स और ली पत्थरों के ढेर के साथ एक खेल खेलते हैं। ढेर की संख्या सम है जो एक पंक्ति में व्यवस्थित हैं, और प्रत्येक ढेर में कुछ पत्थर piles[i] हैं। खेल का उद्देश्य सबसे अधिक पत्थरों के साथ समाप्त होना है। जब कुल पत्थरों की संख्या विषम होती है, तो कोई टाई नहीं होती। एलेक्स और ल