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

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

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

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

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

n := size of A
Define an array a of size (n + 1)
Define an array b of size (n + 1)
sum := 0, p := n * (n + 1)
for initialize i := 1, when i <= n, update (increase i by 1), do:
   a[i] := A[i - 1]
   sum := sum + a[i]
if sum mod p is not equal to 0, then:
   return false
k := sum / p
for initialize i := 1, when i <= n, update (increase i by 1), do:
   b[i] := a[i] - a[(i mod n) + 1]
sum := 0
for initialize i := 1, when i <= n, update (increase i by 1), do:
   a[i] := b[i]
   sum := sum + a[i]
if sum is not equal to 0, then:
   return false
for initialize i := 1, when i <= n, update (increase i by 1), do:
   if (a[i] + k) mod n is not equal to 0 or a[i] + k < 0, then:
      return false
return 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++ में किसी सरणी की बिटनोसिटी की जांच करने का कार्यक्रम

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

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

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

  1. C++ प्रोग्राम लीप ईयर चेक करने के लिए

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