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

सी ++ में सीधे हाथ

मान लीजिए कि रीमा के पास कार्डों का एक हाथ है, जो पूर्णांकों की एक सरणी के रूप में दिया गया है। अब वह कार्डों को समूहों में फेरबदल करना चाहती है ताकि प्रत्येक समूह का आकार W हो, और इसमें लगातार W कार्ड हों। हमें जांचना होगा कि यह संभव है या नहीं।

इसलिए यदि कार्ड [1,2,3,6,2,3,4,7,8] और W =3 हैं, तो उत्तर सही होगा, क्योंकि वह उन्हें [1,2,3] की तरह पुनर्व्यवस्थित कर सकती है। ,[2,3,4],[6,7,8]

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

  • एक मानचित्र m परिभाषित करें, और प्रत्येक तत्व की आवृत्ति को हाथों में m में संग्रहीत करें
  • जबकि हाथ का आकार 0 नहीं है
    • पिछला :=0
    • it :=m में पहले की-वैल्यू पेयर का सूचक
    • मैं के लिए 0 से डब्ल्यू - 1 की सीमा में
      • जबकि इसका मान 0 है, यह :=अगले जोड़े की ओर इशारा करता है
      • यदि i> 0 और इसकी कुंजी – 1 =पिछला या i =0, तो
        • इसका मान 1 से घटाएं
        • पिछला :=इसकी कुंजी
      • अन्यथा झूठी वापसी
      • यह :=अगले जोड़े की ओर इंगित करें
    • n :=n - W
  • सही लौटें।

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool isNStraightHand(vector<int>& hand, int W) {
      map <int, int> m;
      int n = hand.size();
      if(n % W != 0) return false;
      for(int i = 0; i < n; i++){
         m[hand[i]]++;
      }
      while(n){
         map <int, int> :: iterator it = m.begin();
         int prev = 0;
         for(int i = 0; i < W; i++){
            while(it->second == 0) it++;
            if((i > 0 && it->first - 1 == prev) || i == 0){
               it->second--;
               prev = it->first;
            }else{
               return false;
            }
            it++;
         }
         n -= W;
      }
      return true;
   }
};
main(){
   vector<int> v = {1,2,3,6,2,3,4,7,8};
   Solution ob;
   cout << (ob.isNStraightHand(v, 3));
}

इनपुट

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

आउटपुट

1

  1. सी ++ में प्रक्रिया को मारें

    मान लीजिए कि हमारे पास n प्रक्रियाएं हैं, यहां प्रत्येक प्रक्रिया की एक विशिष्ट आईडी होती है जिसे PID या प्रक्रिया आईडी कहा जाता है और उसका PPID (पैरेंट प्रोसेस आईडी) भी होता है। प्रत्येक प्रक्रिया में केवल एक पैरेंट प्रक्रिया होती है, लेकिन इसमें एक या अधिक चाइल्ड प्रक्रियाएं हो सकती हैं। यह एक प

  1. सी ++ में गिलहरी सिमुलेशन

    एक पेड़, एक गिलहरी, और कई नट हैं। स्थितियों को 2डी ग्रिड में कोशिकाओं द्वारा दर्शाया जाता है। आपका लक्ष्य गिलहरी के लिए सभी नटों को इकट्ठा करने और उन्हें एक-एक करके पेड़ के नीचे रखने के लिए न्यूनतम दूरी का पता लगाना है। गिलहरी एक समय में केवल एक अखरोट ले सकती है और चार दिशाओं में - ऊपर, नीचे, बाएँ औ

  1. C++ में आयत क्षेत्र II

    मान लीजिए कि हमारे पास (अक्ष-संरेखित) आयतों की एक सूची है। यहाँ प्रत्येक आयत [i] ={x1, y1, x2, y2}, जहाँ (x1, y1) निचले-बाएँ कोने का बिंदु है, और (x2, y2) ऊपरी-दाएँ कोने के बिंदु हैं आयत। हमें समतल में सभी आयतों द्वारा कवर किया गया कुल क्षेत्रफल ज्ञात करना है। उत्तर बहुत हो सकता है, इसलिए हम मॉड्यू