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

दो सरणियों को समान बनाने के लिए संचालन की संख्या की गणना करने के लिए C++ कोड

मान लीजिए कि हमारे पास n तत्वों की संख्या के साथ दो सरणियाँ A और B हैं। एक ऑपरेशन पर विचार करें:दो सूचकांक i और j का चयन करें, फिर ith तत्व को 1 से घटाएं और jth तत्व को 1 से बढ़ाएं। ऑपरेशन करने के बाद सरणी का प्रत्येक तत्व गैर-ऋणात्मक होना चाहिए। हम A और Bsame बनाना चाहते हैं। हमें A और B को समान बनाने के लिए संक्रियाओं का क्रम ज्ञात करना होगा। यदि संभव न हो, तो -1 लौटें।

तो, अगर इनपुट ए =[1, 2, 3, 4] जैसा है; बी =[3, 1, 2, 4], तो आउटपुट [(1, 0), (2, 0)] होगा, क्योंकि आई =1 और जे =0 के लिए एरे [2, 1, 3] होगा , 4], तो i =2 और j =0 के लिए, यह [3, 1, 2, 4]

होगा।

कदम

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

a := 0, b := 0, c := 0
n := size of A
Define an array C of size n and fill with 0
for initialize i := 0, when i < n, update (increase i by 1), do:
   a := a + A[i]
for initialize i := 0, when i < n, update (increase i by 1), do:
   b := b + A[i]
if a is not equal to b, then:
   return -1
Otherwise
   for initialize i := 0, when i < n, update (increase i by 1),
do:
   c := c + |A[i] - B[i]|
   C[i] := A[i] - B[i]
   c := c / 2
   i := 0
   j := 0
   while c is non-zero, decrease c after each iteration, do:
      while C[i] <= 0, do:
         (increase i by 1)
      while C[j] >= 0, do:
         (increase j by 1)
      print i and j
      decrease C[i] and increase C[j] by 1

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
void solve(vector<int> A, vector<int> B){
   int a = 0, b = 0, c = 0;
   int n = A.size();
   vector<int> C(n, 0);
   for (int i = 0; i < n; i++)
      a += A[i];
   for (int i = 0; i < n; i++)
      b += A[i];
   if (a != b){
      cout << -1;
      return;
   }
   else{
      for (int i = 0; i < n; i++){
         c += abs(A[i] - B[i]);
         C[i] = A[i] - B[i];
      }
      c = c / 2;
      int i = 0, j = 0;
      while (c--){
         while (C[i] <= 0)
            i++;
         while (C[j] >= 0)
            j++;
         cout << "(" << i << ", " << j << "), ";
         C[i]--, C[j]++;
      }
   }
}
int main(){
   vector<int> A = { 1, 2, 3, 4 };
   vector<int> B = { 3, 1, 2, 4 };
   solve(A, B);
}

इनपुट

{ 1, 2, 3, 4 }, { 3, 1, 2, 4 }

आउटपुट

(1, 0), (2, 0),

  1. सी ++ प्रोग्राम डोडेकैगन की संख्या गिनने के लिए जिसे हम आकार डी बना सकते हैं

    मान लीजिए कि हमारे पास एक संख्या d है। विचार करें कि अनंत संख्या में वर्गाकार टाइलें हैं और भुजाओं की लंबाई के साथ नियमित त्रिकोणीय टाइलें हैं। हमें यह पता लगाना है कि इन टाइलों का उपयोग करके हम कितने तरीकों से नियमित डोडेकागन (12-पक्षीय बहुभुज) बना सकते हैं। यदि उत्तर बहुत बड़ा है, तो परिणाम मोड 99

  1. C++ में हेक्साडेसिमल संख्या गिनें

    हमें प्रारंभ और अंत वाली एक श्रेणी दी गई है और कार्य दिए गए श्रेणी में मौजूद हेक्साडेसिमल संख्याओं या वर्णों की गणना करना है। हेक्साडेसिमल अक्षर क्या हैं? कंप्यूटर के संदर्भ में, हेक्साडेसिमल संख्याएँ वे संख्याएँ होती हैं जिनका आधार 16 होता है, जिसका अर्थ है कि द्विआधारी अंक को 16-बिट में दर्शाया ज

  1. C++ का उपयोग करके दो स्ट्रिंग्स को समान बनाने के लिए आवश्यक न्यूनतम संख्या में ऑपरेशन।

    समस्या कथन दो स्ट्रिंग्स str1 और str2 को देखते हुए, दोनों स्ट्रिंग्स में a और b अक्षर होते हैं। दोनों तार समान लंबाई के हैं। दोनों स्ट्रिंग्स में एक _ (रिक्त स्थान) है। कार्य निम्न कार्यों की न्यूनतम संख्या करके पहली स्ट्रिंग को दूसरी स्ट्रिंग में परिवर्तित करना है - यदि _ स्थिति I पर है तो _ को