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

बक्सों का चयन करके सभी पत्थर हटाए जा सकते हैं या नहीं जाँचने का C++ प्रोग्राम


मान लीजिए A सरणी में N तत्व हैं। N बक्से हैं जो एक वृत्त में व्यवस्थित हैं। i-वें बक्से में A[i] पत्थर हैं। हमें जाँचना है कि क्या हम बार-बार ऑपरेशन करके सभी बक्सों से पत्थर हटा सकते हैं: एक बक्सा चुनें, मान लीजिए i-वाँ बक्सा। 1 से N तक प्रत्येक j के लिए, (i+j)-वें बक्से से ठीक j पत्थर हटाएँ। यहाँ (N+k)-वाँ बक्सा k-वाँ बक्सा माना जाता है। यह ऑपरेशन नहीं किया जा सकता यदि किसी बक्से में पर्याप्त पत्थर न हों।

उदाहरण के लिए, यदि इनपुट है A = [4, 5, 1, 2, 3], तो आउटपुट True होगा, क्योंकि हम दूसरे बक्से से शुरू करके सभी पत्थर हटा सकते हैं।

चरण

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

n := A का आकार
आकार n+1 के सरणी a, b परिभाषित करें
sum := 0, p := n * (n + 1) / 2
i := 1 से n तक:
    a[i] := A[i-1]
    sum := sum + a[i]
यदि sum % p != 0, तो false लौटाएँ
k := sum / p
i := 1 से n तक:
    b[i] := a[i] - a[(i % n) + 1]
sum := 0
i := 1 से n तक:
    a[i] := b[i]
    sum := sum + a[i]
यदि sum != 0, तो false लौटाएँ
i := 1 से n तक:
    यदि (a[i] + k) % n != 0 या a[i] + k < 0, तो false लौटाएँ
true लौटाएँ

उदाहरण

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

#include <bits/stdc++.h> using namespace std; bool solve(vector<int> A) {    int n = A.size();    vector<int> a(n + 1);    vector<int> b(n + 1);    int sum = 0, p = n * (n + 1) / 2; for (int i = 1; i <= n; i++) { a[i] = A[i - 1]; sum += a[i]; } if (sum % p != 0) { return false; } int k = sum / p; for (int i = 1; i <= n; i++) { b[i] = a[i] - a[i % n + 1]; } sum = 0; for (int i = 1; i <= n; i++) { a[i] = b[i]; sum += a[i]; } if (sum != 0) { return false; } for (int i = 1; i <= n; i++) { if ((a[i] + k) % n != 0 || a[i] + k < 0) { return false; } } return true; } int main(){ vector<int> A = { 4, 5, 1, 2, 3 }; cout << solve(A) << endl; }

इनपुट

{ 4, 5, 1, 2, 3 }

आउटपुट

1
  1. C++ में सरणी की बिटोनिसिटी की जांच करें C++ में सरणी की बिटोनिसिटी की जांच करें

    N पूर्णांकों की एक सरणी arr[N] दी गई है, कार्य यह जांचना है कि दी गई सरणी बिटोनिक है या नहीं। यदि दी गई सरणी बिटोनिक है तो हां यह एक बिटोनिक सरणी है प्रिंट करें, अन्यथा नहीं यह बिटोनिक सरणी नहीं है प्रिंट करें। एक बिटोनिक सरणी वह है जब सरणी पहले सख्ती से बढ़ते क्रम में होती है और फिर सख्ती से घटते

  1. C++ में इन्वोल्यूटरी मैट्रिक्स जांचें C++ में इन्वोल्यूटरी मैट्रिक्स जांचें

    एक मैट्रिक्स M[r][c] दिया गया है, r पंक्तियों की संख्या दर्शाता है और c कॉलम की संख्या दर्शाता है जैसे कि r = c एक स्क्वायर मैट्रिक्स बनाता है। हमें जांचना है कि दिया गया स्क्वायर मैट्रिक्स इन्वोल्यूटरी मैट्रिक्स है या नहीं।इन्वोल्यूटरी मैट्रिक्सएक मैट्रिक्स को इन्वोल्यूटरी मैट्रिक्स कहा जाता है यदि

  1. - C++ प्रोग्राम: लीप ईयर जांचें

    परिचयलीप ईयर में एक अतिरिक्त दिन होता है जिसे कैलेंडर वर्ष को खगोलीय वर्ष के साथ सिंक्रनाइज़ रखने के लिए जोड़ा जाता है। जो वर्ष 4 से विभाज्य होता है उसे लीप ईयर के रूप में जाना जाता है। हालांकि, 100 से विभाज्य वर्ष लीप ईयर नहीं होते जबकि 400 से विभाज्य वर्ष लीप ईयर होते हैं। उदाहरण (सिंगल if स्टेटमे