इस समस्या में, हमें nXn आकार का एक वर्ग मैट्रिक्स दिया गया है। हमारा कार्य वर्ग मैट्रिक्स के विकर्णों से सबसे छोटा और सबसे बड़ा तत्व खोजना है। हमें मैट्रिक्स के प्राथमिक और द्वितीयक विकर्णों के सबसे छोटे और सबसे बड़े तत्व खोजने हैं।
आइए एक उदाहरण से इस समस्या को समझते हैं,
इनपुट
mat[][] = { {3, 4, 7}, {5, 2, 1}, {1, 8, 6} }आउटपुट
प्राथमिक विकर्ण में सबसे छोटा तत्व = 2 प्राथमिक विकर्ण में सबसे बड़ा तत्व = 6 द्वितीयक विकर्ण में सबसे छोटा तत्व = 1 द्वितीयक विकर्ण में सबसे बड़ा तत्व = 7
समाधान दृष्टिकोण
इस समस्या को हल करने का एक सरल समाधान नेस्टेड लूप्स का उपयोग करना है। प्राथमिक विकर्ण पर तत्वों की जांच के लिए हम i = j मानेंगे। और द्वितीयक विकर्ण के लिए, हम i + j = n - 1 मानेंगे। हम मैट्रिक्स के अधिकतम और न्यूनतम तत्वों को प्राथमिक और द्वितीयक दोनों विकर्णों के लिए खोजेंगे।
हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम,
उदाहरण
#include<iostream> using namespace std; void findMaxAndMinOfDiagonals(int mat[3][3], int n){ if (n == 0) return; int pDiagMin = mat[0][0], pDiagMax = mat[0][0]; int sDiagMin = mat[0][n - 1 ], sDiagMax = mat[0][n - 1]; for (int i = 1; i < n; i++) { for (int j = 1; j < n; j++) { if (i == j){ if (mat[i][j] < pDiagMin) pDiagMin = mat[i][j]; if (mat[i][j] > pDiagMax) pDiagMax = mat[i][j]; } if ((i + j) == (n - 1)) { if (mat[i][j] < sDiagMin){ sDiagMin = mat[i][j]; } if (mat[i][j] > sDiagMax) sDiagMax = mat[i][j]; } } } cout<<("\nSmallest Element of Principal Diagonal : ")<<pDiagMin; cout<<("\nGreatest Element of Principal Diagonal : ")<<pDiagMax; cout<<("\nSmallest Element of Secondary Diagonal : ")<<sDiagMin; cout<<("\nGreatest Element of Secondary Diagonal : ")<<sDiagMax; } int main(){ int mat[3][3] = { { 3, 4, 7 }, { 0, 2, 1 }, { 1, 7, 8 } }; int n = sizeof(mat) / sizeof(mat[0]); findMaxAndMinOfDiagonals(mat, n); }आउटपुट
Smallest Element of Principal Diagonal : 2 Greatest Element of Principal Diagonal : 8 Smallest Element of Secondary Diagonal : 2 Greatest Element of Secondary Diagonal : 7
एक और अधिक प्रभावी समाधान नेस्टेड लूप को सिंगल लूप में कम करना है इस तथ्य का उपयोग करके कि प्राथमिक विकर्ण के लिए मैट के दोनों इंडेक्स समान होते हैं यानी
प्राथमिक विकर्ण तत्व = mat[i][j]। इसी तरह, द्वितीयक विकर्ण तत्व = mat[i][n - i - 1]
हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम,
उदाहरण
#include<iostream> using namespace std; void findMaxAndMinOfDiagonals(int mat[3][3], int n){ if (n == 0) return; int pDiagMin = mat[0][0], pDiagMax = mat[0][0]; int sDiagMin = mat[0][n - 1 ], sDiagMax = mat[0][n - 1]; for (int i = 1; i < n; i++) { if (mat[i][i] < pDiagMin) pDiagMin = mat[i][i]; if (mat[i][i] > pDiagMax) pDiagMax = mat[i][i]; if (mat[i][n - 1 - i] < sDiagMin) sDiagMin = mat[i][n - 1 - i]; if (mat[i][n - 1 - i] > sDiagMax) sDiagMax = mat[i][n - 1 - i]; } cout<<("\nSmallest Element of Principal Diagonal : ")<<pDiagMin; cout<<("\nGreatest Element of Principal Diagonal : ")<<pDiagMax; cout<<("\nSmallest Element of Secondary Diagonal : ")<<sDiagMin; cout<<("\nGreatest Element of Secondary Diagonal : ")<<sDiagMax; } int main(){ int mat[3][3] = { { 3, 4, 7 }, { 0, 2, 1 }, { 1, 7, 8 } }; int n = sizeof(mat) / sizeof(mat[0]); findMaxAndMinOfDiagonals(mat, n); }आउटपुट
Smallest Element of Principal Diagonal : 2 Greatest Element of Principal Diagonal : 8 Smallest Element of Secondary Diagonal : 1 Greatest Element of Secondary Diagonal : 7