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

C++ . में क्षुद्रग्रह टक्कर


मान लीजिए कि हमारे पास एक पंक्ति में क्षुद्रग्रहों का प्रतिनिधित्व करने वाले पूर्णांकों की एक सरणी क्षुद्रग्रह है। अब प्रत्येक क्षुद्रग्रह के लिए, निरपेक्ष मान उसके आकार का प्रतिनिधित्व करता है, और चिन्ह उसकी दिशा का प्रतिनिधित्व करता है जो क्रमशः दाएं और बाएं के लिए सकारात्मक या नकारात्मक हो सकता है। प्रत्येक क्षुद्रग्रह समान गति से चलता है।

हमें सभी टकरावों के बाद क्षुद्रग्रहों की स्थिति का पता लगाना है। जब दो क्षुद्र ग्रह आपस में मिलेंगे तो छोटे वाले में विस्फोट होगा। यदि दोनों एक ही आकार के हों, तो दोनों फट जाएंगे। एक ही दिशा में गति करने वाले दो क्षुद्रग्रह कभी नहीं मिलेंगे।

तो अगर इनपुट [5, 10, -5] जैसा है, तो आउटपुट [5, 10] होगा। यहां 10 और 5, 10 में टकराते हैं, फिर 5 और 10 कभी नहीं टकराएंगे।

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

  • एक ऐरे को रिट करें, n :=arr का आकार

  • मेरे लिए 0 से n - 1 की सीमा में

    • यदि रिट खाली है या रिट का अंतिम तत्व सकारात्मक है और गिरफ्तारी [i] नकारात्मक है, तो

      • arr[i] को रिट में डालें, i को 1 से बढ़ाएँ

    • अन्यथा

      • x:=रिट का अंतिम तत्व, रिट से अंतिम तत्व हटाएं

      • absX :=|x|, absY :=|arr[i]|

      • अगर absX =absY, तो i को 1 से बढ़ा दें

      • अन्यथा

        • अगर absX> absY है, तो x को रिट में डालें, i को 1 बढ़ाएँ

  • वापसी रिट

उदाहरण (C++)

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

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
   public:
   bool isNeg(int x){
      return x < 0;
   }
   vector<int> asteroidCollision(vector<int>& arr) {
      vector <int> ret;
      int n = arr.size();
      for(int i = 0; i< n; ){
         if(ret.empty() || !(!isNeg(ret[ret.size() - 1]) && isNeg(arr[i]))){
            ret.push_back(arr[i]);
            i++;
         } else {
            int x = ret[ret.size() - 1];
            ret.pop_back();
            int absX = abs(x);
            int absY = abs(arr[i]);
            if(absX == absY){
               i++;
            } else {
               if(absX > absY){
                  ret.push_back(x);
                  i++;
               }
            }
         }
      }
      return ret;
   }
};
main(){
   vector<int> v = {5, 10, -4};
   Solution ob;
   print_vector(ob.asteroidCollision(v));
}

इनपुट

[5,10,-4]

आउटपुट

[5, 10, ]

  1. सी++ में जंप गेम वी

    मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी है जिसे arr और एक पूर्णांक d कहा जाता है। एक चरण में हम इंडेक्स i से − . पर जा सकते हैं i + x जहां:i + x

  1. C++ में K अंक हटाएं

    मान लीजिए कि हमारे पास एक गैर-ऋणात्मक पूर्णांक संख्या है जिसे एक स्ट्रिंग के रूप में दर्शाया गया है, हमें संख्या से k अंक निकालना होगा ताकि नई संख्या सबसे छोटी संभव हो। तो अगर इनपुट “1432219” और k =3 जैसा है, तो परिणाम “1219” होगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - स्टैक सेंट को पर

  1. C++ . में चार भाजक

    मान लीजिए कि हमारे पास एक पूर्णांक सरणी संख्या है, हमें उस सरणी में पूर्णांकों के भाजक का योग ज्ञात करना होगा जिसमें ठीक चार भाजक हों। तो अगर सरणी में ऐसा कोई पूर्णांक नहीं है, तो 0 लौटाएं। उदाहरण के लिए, यदि इनपुट [21, 4, 7] है, तो आउटपुट 32 होगा, क्योंकि 21 में चार भाजक हैं 1, 3, 7, 21, 4 में तीन