हमें संख्याओं का एक मैट्रिक्स दिया गया है। लक्ष्य दिए गए मैट्रिक्स के अंदर मौजूद मैजिक स्क्वेयर की संख्या ढूंढना है।
एक मैजिक स्क्वेयर, यदि मैट्रिक्स के रूप में लिया जाए, तो एक 3x3 मैट्रिक्स है जिसमें 1 से 9 तक के तत्व होते हैं जैसे सुडोकु में ग्रिड। गुण हैं:
- सभी संख्याएं ठीक एक बार होती हैं।
- मैट्रिक्स में सभी 9 सेल का योग 45 है।
- 3 की प्रत्येक पंक्ति का योग 15 है।
- 3 के प्रत्येक कॉलम का योग 15 है।
- 3 के विकर्णों का योग 15 है।
- ऐसे योग प्राप्त करने के लिए, 5 हमेशा दोनों विकर्णों के मध्य में होता है।
इनपुट
int arr[][]= { { 1,2,3,0 }, { 4,5,6,1 }, { 7,8,9,0 } }; आउटपुट
मौजूद मैजिक स्क्वेयर: 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 } }; आउटपुट
मौजूद मैजिक स्क्वेयर: 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 दोनों विकर्णों के मध्य में है।
प्रयुक्त दृष्टिकोण
- पूर्णांक सरणी Grid[][] संख्याओं को संग्रहीत करती है, row और col इसके आयाम संग्रहीत करते हैं।
- फ़ंक्शन magicSquare(int a, int b...int i) सभी 9 तत्वों को इनपुट के रूप में लेता है और जांचता है कि क्या यह मैजिक स्क्वेयर बनाता है। यदि मैजिक स्क्वेयर है तो 1 लौटाता है, अन्यथा 0 लौटाता है।
- यहां हम सरणी arr[9] लेंगे ताकि सभी पैरामीटर संग्रहीत हो सकें और जांचें कि क्या वे इसमें अद्वितीय सेल पर कब्जा करके अद्वितीय हैं। यदि किसी सेल में काउंट<1 है तो संख्या 1 से 9 की रेंज में नहीं है, या यदि काउंट>1 तो संख्या अद्वितीय नहीं है। फ्लैग=0 सेट करें।
- यदि फ्लैग 1 है तो हम पंक्ति, कॉलम, विकर्ण योग को 15 के रूप में जांचेंगे। यदि सच है तो यह एक मैजिक स्क्वेयर है। 1 लौटाएं अन्यथा 0 लौटाएं।
- फ़ंक्शन countSquares(int G[3][4],int R, int C) एक ग्रिड, इसकी पंक्तियों और कॉलम को इनपुट के रूप में लेता है और इसमें मौजूद मैजिक स्क्वेयर की संख्या गिनता है।
- Count का उपयोग ऐसे स्क्वेयर की संख्या संग्रहीत करने के लिए किया जाता है।
- पहले तत्व से row-2, col-2 (3x3 मैट्रिक्स) तक पार करना शुरू करें।
- यदि विकर्ण का मध्य G[i+1][j+1] 5 नहीं है तो मैजिक स्क्वेयर संभव नहीं है, वर्तमान इटरेशन को छोड़ दें।
- अन्यथा सभी 9 तत्वों की जांच magicSquare(int a से 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 लौटाता है तो count बढ़ाएं।
- अंत में वांछित परिणाम के रूप में count लौटाएं।
उदाहरण कोड
#include <bits/stdc++.h> using namespace std; // जांचें कि उपग्रिड मैजिक स्क्वेयर है या नहीं int magicSquare(int a, int b, int c, int d, int e, int f, int g, int h, int i){ int flag=1; // सभी संख्याओं को अद्वितीय और 1 से 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) //हर संख्या ठीक एक बार होती है{ flag=0; break; } // सभी योगों की जांच 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]); // मैजिक स्क्वेयर उपग्रिड की जांच 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 <<"ग्रिड में मैजिक स्क्वेयर की संख्या: "<<countSquares(Grid,row,col); return 0; } आउटपुट
ग्रिड में मैजिक स्क्वेयर की संख्या: 1