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

C++ में योग विभाज्य 'k' वाले उप-मैट्रिस की गणना करें

इनपुट के रूप में एक पंक्ति x col मैट्रिक्स को देखते हुए। लक्ष्य मैट्रिक्स [पंक्ति] [col] के भीतर सभी सबमैट्रिस को ढूंढना है, जैसे कि उस सबमैट्रिक्स के तत्वों का योग पूर्णांक k से विभाज्य है।

यदि मैट्रिक्स मैट[3][3] है और k 4 है तो सबमैट्रिस नीचे दिखाए गए अनुसार होंगे:-

आइए उदाहरणों से समझते हैं।

उदाहरण के लिए

इनपुट - मैट्रिक्स[3][3] ={ {1,1,1}, {2,2,2}, {3,3,3} } k=4

आउटपुट - योग विभाज्य 'k' वाले उप-मैट्रिस की संख्या हैं:4

स्पष्टीकरण - सबमैट्रिस ऊपर दिखाए गए अनुसार होंगे।

इनपुट - मैट्रिक्स[3][3] ={ {1,1,1}, {2,2,2}, {3,3,3} } k=12

आउटपुट - योग विभाज्य 'k' वाले उप-मैट्रिस की संख्या हैं:4

स्पष्टीकरण - सबमैट्रिस नीचे दिखाए गए अनुसार होंगे:-

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

इस दृष्टिकोण में हम मैट्रिक्स को बाएं से दाएं और बाएं और दाएं कॉलम की प्रत्येक जोड़ी के लिए, सबमैट्रिक्स के तत्वों को एरे एआर [] में जोड़ देंगे और अलग से इसके तत्वों और सबएरे के योग की गणना करेंगे, जो कि के द्वारा विभाज्य है।

फ़ंक्शन check_val () एक सरणी लेता है जिसमें सबमैट्रिक्स के तत्व 1D सरणी के रूप में होते हैं। अब संचयी योगों की गणना करें और शेषफलों को k से जांचें और शेषफलों की आवृत्ति को arr_2[] में संग्रहित करें।

  • मैट्रिक्स[पंक्ति][col] और पूर्णांक k को इनपुट के रूप में लें।
  • फ़ंक्शन check_val(int arr[], int size, int k) सबमैट्रिस के तत्वों की गिरफ्तारी [] लेता है और एआर के भीतर सभी सबएरे की गिनती देता है जिसमें के द्वारा विभाज्य योग होता है
  • वेरिएबल काउंट और टेम्परेचर को 0 के रूप में लें।
  • के साथ संचयी योगों के शेष की आवृत्तियों को संग्रहीत करने के लिए arr_2[] सरणी लें।
  • लूप के लिए i=0 से i<आकार का उपयोग करके संचयी योगों की गणना करें। arr_2[((temp% k) + k) % k]++ (ऋणात्मक योग के लिए दो बार मॉड लें) का उपयोग करके प्रत्येक arr[i] को अस्थायी और शेष की वृद्धि आवृत्ति में जोड़ें।
  • फिर से लूप ट्रैवर्स फ़्रीक्वेंसी एरे का उपयोग करना arr_2[] और प्रत्येक मान के लिए>1 arr_2[i] * (arr_2[i] - 1)) / 2 जोड़ें ताकि सभी सबएरे की गिनती संभव हो सके।
  • अंत में गिनने के लिए arr_2[0] जोड़ें।
  • फ़ंक्शन मैट्रिक्स_डिविज़िबल (इंट मैट्रिक्स [पंक्ति] [कॉल], इंट साइज़, इंट के) एक इनपुट सबमैट्रिक्स लेता है और के द्वारा विभाज्य योग वाले सभी सबमैट्रिस की गिनती देता है।
  • प्रारंभिक गणना 0 के रूप में लें।
  • एक अस्थायी सरणी को गिरफ्तार करें [आकार]।
  • लूप के लिए दो का उपयोग करके बाएँ स्तंभ अनुक्रमणिका i और दाएँ स्तंभ अनुक्रमणिका j सेट करें।
  • गिरफ्तारी [अस्थायी] + =मैट्रिक्स [अस्थायी] [जे] के रूप में तत्वों के योग की गणना करें।
  • गिरफ्तारी में उपसरणियों की संख्या के लिए [] गिनने के लिए check_val(arr, size, k) जोड़ें।
  • लूप के लिए सभी के अंत में, परिणाम के रूप में वापसी की गणना करें।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
#define row 10
#define col 10

int check_val(int arr[], int size, int k) {
   int count = 0;
   int temp = 0;
   int arr_2[k];
   memset(arr_2, 0, sizeof(arr_2));

   for (int i = 0; i < size; i++) {
      temp = temp + arr[i];
      arr_2[((temp % k) + k) % k]++;
   }
   for (int i = 0; i < k; i++) {
      if (arr_2[i] > 1) {
         count += (arr_2[i] * (arr_2[i] - 1)) / 2;
      }
   }
   count = count + arr_2[0];
   return count;
}

int matrix_divisible(int matrix[row][col], int size, int k) {
   int count = 0;
   int arr[size];

   for (int i = 0; i < size; i++) {
      memset(arr, 0, sizeof(arr));
      for (int j = i; j < size; j++) {
         for (int temp = 0; temp < size; ++temp) {
            arr[temp] += matrix[temp][j];
         }
         count = count + check_val(arr, size, k);
      }
   }
   return count;
}
int main() {
   int matrix[row][col] = {{2,4,-1},{6,1,-9},{2,2, 1}};
   int size = 3, k = 4;
   cout << "Count of sub-matrices having sum divisible ‘k’ are: " << matrix_divisible(matrix, size, k);
   return 0;
}

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा

आउटपुट

Count of sub-matrices having sum divisible 'k' are: 7


  1. सी ++ में एक सरणी में विभाज्य जोड़े की गणना करें

    हमें पूर्णांक तत्वों वाले किसी भी आकार की एक सरणी दी गई है और कार्य एक सरणी में जोड़े की गणना की गणना करना है जैसे कि एक जोड़ी का एक तत्व एक जोड़ी के दूसरे तत्व को विभाजित करता है। एक प्रकार की डेटा संरचना को व्यवस्थित करता है जो एक ही प्रकार के तत्वों के एक निश्चित आकार के अनुक्रमिक संग्रह को संग्

  1. C++ में तीन से विभाज्य सबसे बड़ा योग

    मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी संख्या है, हमें दिए गए सरणी के तत्वों का अधिकतम संभव योग इस तरह खोजने की आवश्यकता है कि यह तीन से विभाज्य हो। तो अगर इनपुट [3,6,5,1,8] जैसा है, तो आउटपुट 18 होगा, क्योंकि सबरे [3,6,1,8] है, और योग 18 है, जो 3 से विभाज्य है । इसे हल करने के लिए, हम इन चरण

  1. k . से विभाज्य योग वाले सभी उप-सरणी गिनें

    इस ट्यूटोरियल में, हम k से विभाज्य योग वाले उप-सरणी की संख्या को खोजने के लिए एक प्रोग्राम पर चर्चा करेंगे। इसके लिए हमें एक सरणी और एक मान k प्रदान किया जाएगा। हमारा कार्य उन उप सरणियों की संख्या ज्ञात करना है जिनका योग दिए गए मान k के बराबर है। उदाहरण #include <bits/stdc++.h> using namespac