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

C++ में मैट्रिक्स ब्लॉक सम


मान लीजिए हमारे पास एक m * n मैट्रिक्स है जिसे mat कहते हैं और एक इंटीजर K है, हमें एक और मैट्रिक्स answer ढूंढना है जहां प्रत्येक answer[i][j] उन सभी एलिमेंट्स mat[r][c] का योग है जिनके लिए i - K <= r <= i + K, j - K <= c <= j + K, और (r, c) मैट्रिक्स में एक वैध पोजीशन है। यदि इनपुट इस प्रकार है -

123
456
789

और k = 1 है, तो आउटपुट होगा -

122116
274533
243928

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

  • n := पंक्तियों की संख्या, और m = कॉलम की संख्या
  • ans नामक एक मैट्रिक्स परिभाषित करें, जिसका ऑर्डर n x m है
  • i के लिए 0 से n - 1 तक की रेंज में
    • j के लिए 0 से m - 1 तक की रेंज में
      • r के लिए i - k से i + k तक की रेंज में
        • c के लिए j - k से j + k तक की रेंज में
          • यदि r और c मैट्रिक्स इंडेक्स के अंदर हैं, तो
            • ans[i, j] := ans[i, j] + mat[r, c]
  • ans लौटाएं

उदाहरण (C++)

बेहतर समझ के लिए निम्नलिखित इम्प्लीमेंटेशन देखें -

#include <bits/stdc++.h> using namespace std; void print_vector(vector<vector<auto> > v){    cout << "[";    for(int i = 0; i<v.size(); i++){       cout << "[";       for(int j = 0; j <v[i].size(); j++){          cout << v[i][j] << ", ";       }       cout << "],";    }    cout << "]"<<endl; } class Solution { public:    vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k) {       int n = mat.size();       int m = mat[0].size();       vector < vector <int> > ans(n , vector <int> (m));       for(int i = 0; i < n; i++){          for(int j = 0; j < m; j++){             for(int r = i - k;r <= i + k; r++){                for(int c = j - k; c <= j + k; c++){                   if(r>= 0 && r < n && c >= 0 && c < m){                      ans[i][j] += mat[r][c];                   }                }             }          }       }       return ans;    } }; main(){    vector<vector<int>> v1 = {{1,2,3},{4,5,6},{7,8,9}};    Solution ob;    print_vector(ob.matrixBlockSum(v1, 1)); }

इनपुट

[[1,2,3],[4,5,6],[7,8,9]] 1

आउटपुट

[[12, 21, 16, ],[27, 45, 33, ],[24, 39, 28, ],]

  1. - C++ में मैट्रिक्स में अधिकतम पथ योग

    इस समस्या में, हमें M*N आकार का एक 2D मैट्रिक्स दिया गया है। हमारा कार्य एक प्रोग्राम बनाना है जो मैट्रिक्स में अधिकतम पथ योग ढूंढेगा।यहां, मैट्रिक्स में अधिकतम पथ योग को एक पंक्ति से अंतिम पंक्ति तक सभी तत्वों के योग के रूप में परिभाषित किया गया है। पथ को पार करने के लिए अनुमत चालें नीचे की ओर और व

  1. - C++ में बूलियन मैट्रिक्स

    बूलियन मैट्रिक्स एक मैट्रिक्स है जिसमें केवल दो एलिमेंट्स 0 और 1 होते हैं। इस बूलियन मैट्रिक्स प्रश्न के लिए, हमारे पास आकार mXn का एक बूलियन मैट्रिक्स arr[m][n] है। और हल करने की शर्त यह है, यदि m[i][j] = 1 तो m[i] = 1 और m[j] = 1 जिसका अर्थ है कि iवीं पंक्ति और jवीं कॉलम के सभी एलिमेंट्स 1 बन जाएं

  1. - C++ में एलिक्वॉट योग (Aliquot Sum)

    यहां हम देखेंगे कि एलिक्वॉट योग क्या है? n का एलिक्वॉट योग n को छोड़कर n के सभी पूर्ण गुणनखंडों का योग है। उदाहरण के लिए, यदि संख्या 20 है, तो पूर्ण गुणनखंड (1, 2, 4, 5, 10) हैं। तो एलिक्वॉट योग 22 है। एक दिलचस्प तथ्य यह है कि, यदि किसी संख्या का एलिक्वॉट योग संख्या स्वयं है, तो वह संख्या एक पूर्ण