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

सी ++ प्रोग्राम दिए गए बाधाओं के साथ मैट्रिक्स के अंतिम मूल्य को खोजने के लिए

मान लीजिए कि हमारे पास एन तत्वों के साथ संख्या ए की एक सूची है। तत्व 1, 2 या 3 हैं, एक संख्या पर विचार करें X[1][j] =A[j] जहां j 1 से N की सीमा में है। और X[i][j] =|X[i-1][ j] - X[i-1][j+1]| जहां i 2 से N की श्रेणी में है और j 1 से N+1-i की श्रेणी में है। हमें X[i][j] का मान ज्ञात करना है।

इसलिए, यदि इनपुट A =[1,2,3,1] जैसा है, तो आउटपुट 1 होगा, क्योंकि

X[1][1] to X[1][4] are 1, 2, 3, 1
X[2][1], X[2][2], X[2][3] are |1-2| = 1, |2 - 3| = 1 and |3 - 1| = 2
X[3][1], X[3][2] are ∣ 1 − 1∣ = 0, ∣ 1 − 2∣ = 1.
X[4][1] = |0 - 1| = 1
So the answer is 1

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

Define a function calc(), this will take N, M,
cnt := 0
for initialize k := N, when k is non-zero, update k >>= 1, do:
   cnt := floor of (cnt + k)/2
for initialize k := M, when k is non-zero, update k >>= 1, do:
   cnt := floor of (cnt - k)/2
for initialize k := N - M, when k is non-zero, update k >>= 1, do:
   cnt := floor of (cnt - k)/2
return invert of cnt
From the main method, do the following
n := size of A
Define an array arr of size (n + 1)
for initialize i := 1, when i < n, update (increase i by 1), do:
   arr[i - 1] = |A[i] - A[i - 1]|
(decrease n by 1)
hh := 1, pd := 0, ck := 0
for initialize i := 0, when i < n, update (increase i by 1), do:
   if arr[i] is non-zero, then:
      if arr[i] is same as 1, then:
         hh := 0
         pd := pd XOR calc(n - 1, i)
      Otherwise
         ck := ck XOR calc(n - 1, i)
ck := ck AND hh
if pd XOR ck is non-zero, then:
   return "1" + hh
return "0"

उदाहरण

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

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

int calc(int N, int M) {
   int cnt = 0;
   for (int k = N; k; k >>= 1)
      cnt += k >> 1;
   for (int k = M; k; k >>= 1)
      cnt -= k >> 1;
   for (int k = N - M; k; k >>= 1)
      cnt -= k >> 1;
   return !cnt;
}
string solve(vector<int> A) {
   int n = A.size();
   vector<int> arr(n + 1);
   for (int i = 1; i < n; i++) {
      arr[i - 1] = abs(A[i] - A[i - 1]);
   }
   --n;
   bool hh = 1, pd = 0, ck = 0;
   for (int i = 0; i < n; i++)
   if (arr[i]) {
      if (arr[i] == 1)
         hh = 0, pd ^= calc(n - 1, i);
      else
         ck ^= calc(n - 1, i);
   }
   ck &= hh;
   if (pd ^ ck)
   return "1" + hh;
   return "0";
}
int main(){
   vector<int> A = { 1, 2, 3, 1 };
   cout << solve(A) << endl;
}

इनपुट

{ 1, 2, 3, 1 }

आउटपुट

1

  1. C++ में दिए गए मान के साथ पत्ते हटाएं

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

  1. C++ प्रोग्राम एक मैट्रिक्स के स्थानान्तरण को खोजने के लिए

    मैट्रिक्स संख्याओं का एक आयताकार सरणी है जिसे पंक्तियों और स्तंभों के रूप में व्यवस्थित किया जाता है। मैट्रिक्स का ट्रांसपोज़ एक नया मैट्रिक्स है जिसमें मूल की पंक्तियाँ अब कॉलम हैं और इसके विपरीत। उदाहरण के लिए। नीचे एक मैट्रिक्स दिया गया है - 1 2 3 4 5 6 7 8 9 उपरोक्त मैट्रिक्स का स्थानान्तरण इस

  1. C++ प्रोग्राम किसी वर्ण का ASCII मान ज्ञात करने के लिए

    ASCII (अमेरिकन स्टैंडर्ड कोड फॉर इंफॉर्मेशन इंटरचेंज) टेबल में 128 कैरेक्टर हैं, जिनका मान 0 से 127 तक है। विभिन्न वर्णों के कुछ ASCII मान इस प्रकार हैं - चरित्र ASCII Value A 65 a 97 Z 90 z 122 $ 36 & 38 ? 63 एक प्रोग्राम जो किसी कैरेक्टर का ASCII मान ढूंढता है, वह इस प्रकार दिया जाता