इस समस्या में, हमें nXn आकार का एक वर्ग मैट्रिक्स दिया गया है। हमारा काम वर्ग मैट्रिक्स विकर्णों से सबसे छोटा और सबसे बड़ा तत्व खोजना है। हमें मैट्रिक्स के प्राथमिक और द्वितीयक विकर्णों के सबसे छोटे और सबसे बड़े तत्वों को खोजने की जरूरत है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट
mat[][] = { {3, 4, 7}, {5, 2, 1}, {1, 8, 6} }
आउटपुट
Smallest element in Primary Diagonal = 2 Largest element in Primary Diagonal = 6 Smallest element in Secondary Diagonal = 1 Largest element in Secondary Diagonal = 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
एक और अधिक प्रभावी समाधान नेस्टेड लूप को सिंगल लूप में कम कर रहा है, इस तथ्य का उपयोग करते हुए कि प्राथमिक विकर्ण के लिए मैट के दोनों सूचकांक समान हैं यानी
primary diagonal elements = mat[i][j]. Similarly, for secondary diagonal elements = 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