इस समस्या में, हमें एक मैट्रिक्स दिया जाता है mat पूर्णांक मानों के आकार mXn का। हमारा काम एक प्रोग्राम बनाना है एक मैट्रिक्स में समान आयताकार योग के साथ सेल प्रिंट करें ।
समस्या का विवरण: हम मैट्रिक्स में एक सेल इस तरह से खोजेंगे कि उप-मैट्रिस का योग जो सेल के साथ शुरू और समाप्त हो रहा है, शेष सभी तत्वों के योग के बराबर है।
एक सेल के लिए मैट्रिक्स (ए, बी) सब-मैट्रिक्स मैट [0] [0] से मैट [ए] [बी] और मैट [ए] [बी] से मैट [एम] [एन] के बराबर है शेष सभी तत्वों का योग।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट: चटाई [] [] ={ {5, 0, 2, 7}
{3, 0, 1, 0}
{1, 4, 1, 3}
{10, 0, 2, 1}}
आउटपुट: (2, 1)
स्पष्टीकरण:
तत्व के लिए (2,3)
सबमैट्रिक्स1 है - { {5, 0}
{3, 0}
{1, 4}}
Submatrix2 है - { {4, 1, 3}
{0, 2, 1}}
योग =5 + 0 + 3 + 0 + 1 + 4 + 1 + 3 + 0 + 2 + 1 =20
शेष तत्वों का योग =2 + 7 + 1 + 0 + 10 =20
समाधान दृष्टिकोण
समस्या को हल करने के लिए, हमें 2 सहायक उप-मैट्रिसेस बनाने होंगे, aux1[m][n] और aux2[m][n]। aux1[i][j] (0,0) से (i, j) तक सभी तत्वों का योग संग्रहीत करेगा और aux2[i][j] (i,j) से (i,j) तक सभी तत्वों का योग संग्रहीत करेगा ( एन, एम)। फिर हम दोनों योगों को जोड़ देंगे और मैट(i,j) को घटा देंगे क्योंकि यह दो बार आएगा।
फिर हम इस योग की तुलना मैट्रिक्स के सभी तत्वों के योग से करेंगे। यदि सेल का योग मैट्रिक्स के योग का आधा है। फिर परिणाम सेल है, और हम इसे प्रिंट करेंगे।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,
उदाहरण
#include <iostream> using namespace std; #define R 4 #define C 4 void findCellWithSameRectSum(int mat[R][C]) { int m = R, n = C; int aux1[m][n], aux2[m][n]; int matSum = 0; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { aux2[i][j] = aux1[i][j] = mat[i][j]; matSum += mat[i][j]; } } for (int i = 1; i < m; i++) { aux1[i][0] += aux1[i-1][0]; aux2[m-i-1][n-1] += aux2[m-i][n-1]; } for (int j = 1; j < n; j++) { aux1[0][j] += aux1[0][j-1]; aux2[m-1][n-j-1] += aux2[m-1][n-j]; } for (int i = 1; i < m; i++) for (int j = 1; j < n; j++) { aux1[i][j] += aux1[i-1][j] + aux1[i][j-1] - aux1[i-1][j-1]; aux2[m-i-1][n-j-1] += aux2[m-i][n-j-1] + aux2[m-i-1][n-j] - aux2[m-i][n-j]; } for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) if (matSum == 2 * (aux1[i][j] + aux2[i][j] - mat[i][j])) cout << "(" << i << ", " << j << ")\t"; } int main() { int mat[R][C] = {{5, 0, 2, 7}, {3, 0, 1, 0}, {1, 4, 1, 3}, {10, 0, 2, 1}}; cout<<"The cells with same rectangular sums in a matrix is \n"; findCellWithSameRectSum(mat); return 0; }
आउटपुट
The cells with same rectangular sums in a matrix is (1, 1) (2, 1)