C में 3×3 मैजिक स्क्वायर पहेली को कैसे हल करें Python
⚡ स्मार्ट सारांश
मैजिक स्क्वायर पहेलियों में n गुणा n ग्रिड के अंदर लगातार संख्याओं को इस तरह व्यवस्थित किया जाता है कि प्रत्येक पंक्ति, स्तंभ और मुख्य विकर्ण का योगफल एक समान हो, जिसे मैजिक कॉन्स्टेंट कहा जाता है, जो उन्हें मनोरंजक गणित और एल्गोरिथम सोच का एक उत्कृष्ट अभ्यास बनाता है।
मैजिक स्क्वायर क्या है?
मैजिक स्क्वायर एक वर्गाकार मैट्रिक्स होता है जिसमें संख्याओं की एक विशेष व्यवस्था होती है। मान इस प्रकार रखे जाते हैं कि प्रत्येक पंक्ति, प्रत्येक स्तंभ और दोनों मुख्य विकर्णों का योग समान रहे। मैजिक स्क्वायर सरल तर्क पहेलियाँ हैं जिनका उपयोग मनोरंजक गणित में किया जाता है।
जादुई वर्ग उदाहरण:
ऊपर दिया गया आरेख 3 कोटि के एक मैजिक स्क्वायर को दर्शाता है। इसके प्रत्येक विकर्ण, पंक्ति और स्तंभ का योग 15 के बराबर है। अगला भाग बताता है कि यह स्थिर योग कैसे प्राप्त होता है।
मैजिक स्क्वेयर कैसे काम करते हैं
n कोटि का एक मैजिक स्क्वायर एक n गुणा n मैट्रिक्स होता है जिसमें n² धनात्मक पूर्णांक होते हैं। पंक्तियों या स्तंभों की संख्या को मैट्रिक्स की कोटि कहा जाता है।
आम तौर पर मैजिक स्क्वायर पहेलियों का क्रम विषम होता है और इनमें 1 से n² तक की पूर्णांक संख्याओं का उपयोग होता है। क्योंकि प्रत्येक पंक्ति, स्तंभ और विकर्ण का योग एक समान होना चाहिए, इसलिए उस मान को मैजिक सम या मैजिक कांस्टेंट कहा जाता है। यह कांस्टेंट केवल n पर निर्भर करता है। n क्रम के मैजिक सम का सूत्र इस प्रकार है:
3 कोटि के एक जादुई वर्ग पर विचार करें। तब जादुई योग होगा:
यह सूत्र अंकगणित की व्याख्या करता है, लेकिन इस पहेली का एक लंबा सांस्कृतिक इतिहास है जो इसे इसका यादगार नाम देता है।
इन्हें जादू क्यों कहा जाता है?
प्राचीन गणितज्ञ संख्याओं के रोचक संयोजनों से मोहित थे, और जादुई वर्ग उनमें से एक था। इसका सबसे पहला प्रमाण लगभग 190 ईसा पूर्व चीन से मिलता है।
अध्ययनों से प्राचीन जापान, भारत और अरब में जादुई वर्ग पहेलियों के प्रमाण मिलते हैं। लोककथाओं में इन संरचनाओं को जादुई दुनिया से जोड़ा गया और यह नाम प्रचलित हो गया। लोककथाओं से परे, गणितज्ञों ने औपचारिक श्रेणियां भी परिभाषित की हैं जो एक वर्ग को दूसरे से अलग करती हैं।
मैजिक स्क्वायर के प्रकार
गणित में मैजिक स्क्वेयर के कई प्रकार होते हैं:
- सामान्य जादुई वर्ग: इसमें पहले n² प्राकृतिक संख्याएँ शामिल हैं।
- अर्द्ध-जादुई वर्ग: केवल पंक्तियों और स्तंभों का योग ही उस जादुई स्थिरांक के बराबर होता है।
- सरल जादू वर्ग: पंक्तियों, स्तंभों और दोनों मुख्य विकर्णों का योग जादुई स्थिरांक के बराबर होता है।
- सबसे उत्तम जादुई वर्ग: एक सामान्य मैजिक स्क्वायर जिसमें दो अतिरिक्त गुण हैं। मैट्रिक्स के प्रत्येक 2 गुणा 2 उप-वर्ग का योग 2(n²+1) होता है, और n/2 सेल की दूरी पर स्थित संख्याओं के किसी भी जोड़े का योग n²+1 होता है।
अतिरिक्त गुणों के आधार पर और भी श्रेणियाँ मौजूद हैं। इस ट्यूटोरियल में जब भी "मैजिक स्क्वायर" शब्द का प्रयोग बिना किसी विशेषण के किया जाता है, तो इसका तात्पर्य विषम क्रम वाले, सामान्य, सरल मैजिक स्क्वायर से होता है।
मैजिक स्क्वायर उत्पन्न करने का एल्गोरिदम
विषम क्रम के मैजिक स्क्वायर को उत्पन्न करने के लिए क्लासिक एल्गोरिदम, जिसे सियामी विधि कहा जाता है, इस प्रकार है:
- पहली संख्या (1) को (n/2, n-1) स्थिति पर संग्रहित किया जाता है, जहाँ पहला निर्देशांक पंक्ति सूचकांक है और दूसरा स्तंभ सूचकांक है। बाद के चरणों के लिए, इस स्थिति को (x, y) कहें।
- अगली संख्या (x-1, y+1) पर रखी जाती है। यदि वह स्थिति अमान्य है, तो निम्नलिखित नियम लागू करें:
- यदि पंक्ति सूचकांक -1 है, तो इसे n-1 में बदल दें। यदि स्तंभ सूचकांक n है, तो इसे 0 में बदल दें।
- यदि परिकलित स्थिति में पहले से ही कोई संख्या मौजूद है, तो पंक्ति को 1 से बढ़ाएँ और स्तंभ को 2 से घटाएँ।
- यदि पंक्ति -1 है और स्तंभ n है, तो नई स्थिति (0, n-2) है।
नोट: यह एल्गोरिदम केवल विषम क्रम के वैध मैजिक स्क्वायर उत्पन्न करता है। परिणाम एक सामान्य मैजिक स्क्वायर होता है जिसमें पहले n² प्राकृतिक संख्याएँ शामिल होती हैं। एक ही n के लिए एक से अधिक वैध हल हो सकते हैं।
तीसरे क्रम के एक छोटे से उदाहरण के माध्यम से नियम और भी स्पष्ट हो जाते हैं, जिसमें 1 से 9 तक की संख्याओं का उपयोग किया जाता है।
यह 3x3 वर्ग पर कैसे काम करता है
आवेदन करना कलन विधि ऊपर दिए गए चरणों का पालन करें:
चरण 1) पहली संख्या (1) को (3/2, 3-1) या (1, 2) पर रखा जाता है। बाद के चरणों के लिए, x = 1 और y = 2 सेट करें।
चरण 2) शेष संख्याओं की स्थिति की गणना निम्नानुसार की जाती है।
संख्या 2 की स्थिति:
अगली संख्या (x-1, y+1) या (0, 3) पर जानी चाहिए, जो कि मान्य स्थिति नहीं है। नियम (a) के अनुसार, स्तंभ 0 पर समाप्त होता है, जिससे (0, 0) प्राप्त होता है। x = 0 और y = 0 मान लें।
संख्या 3 की स्थिति:
संख्या 3 (x-1, y+1) या (-1, 1) पर होनी चाहिए, जो कि मान्य स्थिति नहीं है। नियम (a) के अनुसार, पंक्ति n-1 (जो कि 2 है) पर घूमती है। इसलिए संख्या 3 (2, 1) पर जाती है। x = 2 और y = 1 मान लें।
संख्या 4 की स्थिति:
संख्या 4 (x-1, y+1) या (1, 2) पर होनी चाहिए, जो मान्य है लेकिन इसमें पहले से ही 1 शामिल है। नियम (b) के अनुसार, नई स्थिति (1+1, 2-2) या (2, 0) है। x = 2, y = 0 निर्धारित करें।
संख्या 5 की स्थिति:
संख्या 5 (x-1, y+1) या (1, 1) पर होनी चाहिए, जो एक वैध रिक्त स्थान है। x = 1, y = 1 सेट करें।
संख्या 6 की स्थिति:
संख्या 6 (x-1, y+1) या (0, 2) पर होनी चाहिए, जो एक वैध रिक्त स्थान है। x = 0, y = 2 सेट करें।
संख्या 7 की स्थिति:
संख्या 7 (x-1, y+1) या (-1, 3) पर होनी चाहिए, जो मान्य नहीं है। नियम (c) के अनुसार, नई स्थिति (0, n-2) या (0, 1) है। x = 0, y = 1 निर्धारित करें।
संख्या 8 की स्थिति:
संख्या 8 (x-1, y+1) या (-1, 2) पर होनी चाहिए, जो मान्य नहीं है। नियम (a) के अनुसार, पंक्ति 2 पर वापस आ जाती है, जिससे (2, 2) प्राप्त होता है। x = 2, y = 2 मान लें।
संख्या 9 की स्थिति:
संख्या 9 (x-1, y+1) या (1, 3) पर होनी चाहिए, जो मान्य नहीं है। नियम (a) के अनुसार, स्तंभ 0 पर समाप्त होता है, जिससे (1, 0) प्राप्त होता है।
जब सभी सेल भर जाते हैं, तो वही तर्क सीधे स्यूडो-कोड में परिवर्तित हो जाता है।
मैजिक स्क्वायर के लिए छद्म-कोड
Begin Declare an array of size n*n Initialize the array to 0 Set row = n/2 Set column = n-1 For all number i: from 1 to n*n If the row = -1 and column = n row = 0 column = n-2 Else If row = -1 row = n-1 If column = n column = 0 If the position already contains a number decrement column by 2 increment row by 1 continue until the position is not 0 Else put the number i into the calculated position increment i Increment column value Decrement row value End
स्यूडो-कोड सीधे कंपाइल और इंटरप्रिटेड भाषाओं पर मैप होता है, जिसे आगे दिखाया गया है। C++ और Python.
C++ Code मैजिक स्क्वायर के लिए
इनपुट:
/* A C/C++ program for generating odd order magic squares */ #include <bits/stdc++.h> using namespace std; void GenerateMagicSquare(int n) { int magic[n][n]; //initializing the array for(int i=0; i<n; i++) for(int j=0; j<n; j++) magic[i][j] = 0; //setting row and column value int i = n / 2; int j = n - 1; for (int k = 1; k <= n * n;) { //checking condition (c) if (i == -1 && j == n) { j = n - 2; i = 0; } else { //checking condition (a) if (j == n) j = 0; if (i < 0) i = n - 1; } //checking condition (b) if (magic[i][j]) { j -= 2; i++; continue; } else { //placing the number into the array magic[i][j] = k; k++; } //for the next number setting (i-1, j+1) j++; i--; } //printing the matrix for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) cout << magic[i][j] << " "; cout << endl; } } int main() { //This code works for only odd numbers int n = 7; cout<<"The magic sum is " << n*(n*n+1)/2 <<endl; GenerateMagicSquare(n); return 0; }
उदाहरण का आउटपुट:
The magic sum is 175 20 12 4 45 37 29 28 11 3 44 36 35 27 19 2 43 42 34 26 18 10 49 41 33 25 17 9 1 40 32 24 16 8 7 48 31 23 15 14 6 47 39 22 21 13 5 46 38 30
RSI Python नीचे दिए गए संस्करण में पंक्ति और स्तंभ के समान नियम लागू होते हैं।
Python Code मैजिक स्क्वायर के लिए
def GenerateMagicSquare(n): #initializing the array magic = [[0 for x in range(n)] for y in range(n)] #setting row and column value i = n // 2 j = n - 1 k = 1 while k <= (n * n): #checking condition (c) if i == -1 and j == n: j = n - 2 i = 0 else: #checking condition (a) if j == n: j = 0 if i < 0: i = n - 1 #checking conditon (b) if magic[i][j]: j = j - 2 i = i + 1 continue else: #placing the number into the array magic[i][j] = k k = k + 1 #for the next number setting (i-1, j+1) j = j + 1 i = i - 1 #printing the matrix for i in range(0, n): for j in range(0, n): print('%2d ' % (magic[i][j]),end='') if j == n - 1: print() #This code works for only odd numbers n = 7 print("The magic sum is ",n * (n * n + 1) // 2, "\n") GenerateMagicSquare(n)
उदाहरण का आउटपुट:
The magic sum is 175 20 12 4 45 37 29 28 11 3 44 36 35 27 19 2 43 42 34 26 18 10 49 41 33 25 17 9 1 40 32 24 16 8 7 48 31 23 15 14 6 47 39 22 21 13 5 46 38 30
दोनों कार्यान्वयन एक समान रूप से व्यवहार करते हैं, जिससे उनकी लागत की तुलना करना आसान हो जाता है।
जटिलता विश्लेषण
- अंतरिक्ष जटिलता: मैजिक स्क्वायर को n x n सरणी में संग्रहीत किया जाता है, इसलिए स्थान जटिलता O(n²) है।
- समय जटिलता: यह जनरेटर दो नेस्टेड लूप का उपयोग करता है। बाहरी लूप n बार चलता है, और आंतरिक लूप भी n बार चलता है, इसलिए कुल समय जटिलता O(n²) है।














