हमें संख्याओं के एक मैट्रिक्स के साथ दिया गया है। लक्ष्य दिए गए मैट्रिक्स के अंदर मौजूद जादुई वर्गों की संख्या ज्ञात करना है।
एक मैजिक स्क्वायर, यदि मैट्रिक्स के रूप में लिया जाता है, तो एक 3X3 मैट्रिक्स होता है जिसमें सुडोकू में ग्रिड की तरह 1 से 9 तक के तत्व होते हैं। गुण हैं -
- सभी नंबर बिल्कुल एक बार आते हैं।
- मैट्रिक्स में सभी 9 कोशिकाओं का योग 45 है।
- 3 की प्रत्येक पंक्ति का योग 15 है।
- 3 के प्रत्येक कॉलम का योग 15 है।
- 3 के विकर्णों का योग 5 होता है।
- इस तरह के योग प्राप्त करने के लिए, 5 हमेशा दोनों विकर्णों के बीच में होता है।
इनपुट
int arr[][]= { { 1,2,3,0 }, { 4,5,6,1 }, { 7,8,9,0 } };
आउटपुट
Magic Squares present: 0
स्पष्टीकरण − समझने के लिए मैट्रिक्स फॉर्म बनाना −
1 | 2 | 3 | 0 |
4 | 5 | 6 | 1 |
7 | 8 | 9 | 0 |
सभी तत्व 1 से 9 के बीच हैं और अद्वितीय हैं। लेकिन,
1+2+3=6 !=4+5+6=15 !=7+8+9=23
साथ ही विकर्णों का योग 15 के बराबर नहीं होता है।
इनपुट
arr[][]= { { 1,2,3,0 }, { 4,5,6,1 }, { 7,8,9,0 } };
आउटपुट
Magic Squares present : 1
स्पष्टीकरण − समझने के लिए मैट्रिक्स फॉर्म बनाना −
1 | 6 | 8 | 4 |
8 | 1 | 6 | 0 |
3 | 5 | 7 | 1 |
4 | 9 | 2 | 0 |
सभी नंबर अद्वितीय हैं और 1 से 9 की सीमा में हैं।
पंक्तियों का योग, 8+1+6=3+5+7=4+9+2=15
कॉलम योग, 8+3+4=1+5+9=6+7+2=15
विकर्णों का योग, 8+5+2=4+5+6=15
साथ ही 1 से 9 जोड़ने पर हमें 45 मिलता है, और 5 दोनों विकर्णों के बीच में होता है।
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
-
पूर्णांक सरणी ग्रिड [] [] संख्याओं को संग्रहीत करता है, पंक्ति और कॉल इसके आयामों को संग्रहीत करता है।
-
फंक्शन मैजिकस्क्वायर (int a, int b…..int i) सभी 9 तत्वों को इनपुट के रूप में लेता है और जांचता है कि क्या यह मैजिक स्क्वायर बनाता है। अगर मैजिक स्क्वायर है तो 1 लौटाता है, अन्यथा 1 लौटाता है।
-
यहां हम सभी मापदंडों को संग्रहीत करने के लिए सरणी गिरफ्तारी [9] लेंगे और जांच करेंगे कि क्या वे अद्वितीय हैं, यह जांच कर कि वे इसमें अद्वितीय कोशिकाओं पर कब्जा करते हैं। यदि किसी सेल की गिनती है<1 का मतलब नहीं है। 1 से 9 की सीमा में नहीं है, या यदि गिनती> 1 है तो नहीं। अद्वितीय नहीं है। ध्वज सेट करें=0
-
यदि ध्वज 1 है तो हम पंक्ति, स्तंभ, विकर्ण योगों को 15 के रूप में जांचेंगे। यदि सत्य है तो यह जादुई वर्ग है। 1 और वापसी 0.
-
फंक्शन काउंट स्क्वायर (इंट जी [3] [4], इंट आर, इंट सी) एक ग्रिड लेता है, इसकी पंक्तियों और स्तंभों को इनपुट के रूप में और संख्या की गणना करता है। इसमें मौजूद जादुई वर्गों का।
-
ऐसे वर्गों की संख्या की गणना करने के लिए गणना का उपयोग किया जाता है।
-
पहले एलिमेंट से रो-2, col-2 (3X3 मैट्रिक्स) तक ट्रैवर्सिंग शुरू करें
-
यदि विकर्ण G[i+1][j+1] का मध्य 5 नहीं है तो मैजिक स्क्वायर संभव नहीं है, वर्तमान पुनरावृत्ति को छोड़ दें।
-
अन्य सभी 9 तत्वों को मैजिकस्क्वायर (int a to i) में पास करके जांचें
-
G[i][j] सहित सभी 9 तत्व G[i+1][j], G[i+2][j],G[i+1][j+1],G[i][j] हैं +1],G[i][j+2],G[i+2][j+2],G[i+2][j+1], G[i+1][j+2]पी>
-
अगर यह 1 वृद्धि गिनती लौटाता है।
-
अंत में वांछित परिणाम के रूप में वापसी की गणना करें।
उदाहरण
#include <bits/stdc++.h> using namespace std; // to check is subgrid is Magic Square int magicSquare(int a, int b, int c, int d, int e, int f, int g, int h, int i){ int flag=1; // to mark all numbers are unique and between 1 to 9 int arr[9]={0}; arr[a-1]++; arr[b-1]++; arr[c-1]++; arr[d-1]++; arr[e-1]++; arr[f-1]++; arr[g-1]++; arr[h-1]++; arr[i-1]++; for(int i=0;i<9;i++) if(arr[i]>1 || arr[i]<1) //every number occurs exactly once{ flag=0; break; } // checking all sums as 15 if (flag==1 && (a + b + c) == 15 && (d + e + f) == 15 && (g + h + i) == 15 && (a + d + g) == 15 &&(b + e + h) == 15 && (c + f + i) == 15 &&(a + e + i) == 15 && (c + e + g) == 15) return 1; return 0; } int countSquares(int G[3][4],int R, int C){ int count = 0; for (int i = 0; i < R - 2; i++) for (int j = 0; j < C - 2; j++) { if (G[i + 1][j + 1] != 5) continue; int ismagic=magicSquare(G[i][j], G[i][j + 1], G[i][j + 2], G[i + 1][j], G[i + 1][j + 1], G[i + 1][j + 2], G[i + 2][j], G[i + 2][j + 1], G[i + 2][j + 2]); // check for magic square subgrid if (ismagic==1) count++; } return count; } int main(){ int Grid[3][4] = { { 4, 3, 8, 4 },{ 9, 5, 1, 9 },{ 2, 7, 6, 2 } }; int row=3; int col=4; cout <<"Count of Magic Squares in Grid: "<<countSquares(Grid,row,col); return 0; }
आउटपुट
Count of Magic Squares in Grid: 1