المربع السحري – حل لغز 3×3 باستخدام أمثلة C وPython

ما هو ماجيك سكوير؟

المربع السحري عبارة عن مصفوفة مربعة ذات ترتيب خاص للأرقام. هؤلاء numbers يتم ترتيبها بحيث مجموع numbers على كل قطري، يبقى الصف والعمود كما هو. ماجيك سكوares الألعاب عبارة عن ألغاز منطقية بسيطة تستخدم في الرياضيات الترفيهية.

ماجيك سكوares مثال:

المربع السحري

الرسم البياني أعلاه هو مثال لمربع سحري من الرتبة 3. مجموع كل قطري، صف، وعمود هو 15.

كيف يعمل المربع السحري

ماجيك سكوares هي مصفوفات n*n تتكون من n^2 أعداد صحيحة موجبة. يسمى عدد الصفوف أو الأعمدة في المصفوفة المربعة بترتيب المصفوفة.

عادة، السحر squares الألغاز لها ترتيبات فردية وتحمل الأعداد الصحيحة من 1 إلى n^2. مجموع كل قطري، صف، وعمود هو نفسه. يسمى هذا الرقم المجموع السحري أو الثابت السحري. بشكل عام، يعتمد هذا المجموع السحري على ترتيب المصفوفة. السحر سكوares صيغة المجموع السحري للترتيب n هو-

يعمل المربع السحري

لنأخذ مثالاً على المربع السحري الذي يحتوي على أعداد صحيحة 3. إذن، المجموع السحري سيكون-

يعمل المربع السحري

يعمل المربع السحري

لماذا يطلق عليهم السحر؟

كان علماء الرياضيات القدماء مفتونين بطبيعة العديد من المجموعات المثيرة للاهتمام من numbers. وكان المربع السحري واحدا منهم. أقرب دليل على السحر squares يعود تاريخها إلى الصين عام 190 قبل الميلاد.

تظهر بعض الدراسات أدلة على وجود السحر squares اللغز في اليابان القديمة والهند والجزيرة العربية. بناءً على بعض الأساطير، كان من المفترض أن تلك التشكيلات الخاصة لـ numbers كانت مرتبطة بالعالم السحري. وبالتالي، تلك سكوares تم تسميتها ماجيك squares.

أنواع المربع السحري

هناك أنواع مختلفة من السحر squares الرياضيات -

  • المربع السحري العادي: يحتوي هذا النوع من المربع السحري على أول n^2 numbers.
  • الساحة شبه السحرية: في هذا النوع، فقط الصفوف والأعمدة هي التي تصل إلى الثابت السحري.
  • المربع السحري البسيط: وعلى النقيض من النوع السابق، فإن الصفوف والأعمدة وكلا القطرين مجموعهما ثابت سحري.
  • المربع السحري الأكثر مثالية: هذا مربع سحري عادي له خاصيتين خاصتين. هنا، كل مربع فرعي 2 × 2 من المصفوفة يضيف ما مجموعه 2(n^2+1). وأي زوج من numbers التي هي n/2 squares بصرف النظر عن مجموع الشبكة إلى n^2+1.

بناءً على الخصائص، هناك العديد من أنواع السحرares. ولكن عندما نذكر المربع السحري فقط، فإننا نفترض أنه مربع سحري عادي وبسيط ذو ترتيب فردي.

خوارزمية لتوليد المربع السحري

خوارزمية توليد squ السحري ذو الترتيب الفرديares هو:

  • سيتم تخزين الرقم الأول أو 1 في (n/2, n-1)، حيث يكون الإحداثي الأول هو موضع الصف، والإحداثي الثاني هو موضع العمود. ل later الخطوات، دعونا نشير إلى هذا الموقف كـ (x، y).
  • التالي numbers سيتم تخزينها في (x-1، y+1). إذا كان الموقف غير صالح، فسننظر في ما يليwing الظروف.
    1. إذا كان موضع الصف هو -1، فسوف يتحول إلى n-1. وبالمثل، إذا كان موضع العمود المحسوب هو n، فسوف يتحول إلى 0.
    2. سيتم زيادة موضع الصف بمقدار 1، وسيتم إنقاص موضع العمود بمقدار 2 إذا كان الموضع المحسوب يحتوي بالفعل على رقم.
    3. إذا كان موضع الصف هو -1 وموضع العمود المقابل هو n، فسيكون الموضع الجديد (0، n-2.

ملحوظة: تقوم هذه الخوارزمية بإنشاء squ سحري صالح فقطares من أمر غريب. نحن أيضًا نعتبر هذا المربع السحري مربعًا سحريًا عاديًا به أول n^2 numbers. علاوة على ذلك، يمكن أن يكون هناك حلول متعددة لنفس قيمة n.

دعونا نأخذ مثالا ونرى كيف يعمل. لنفترض أننا نريد العثور على المربع السحري من الرتبة 3. نظرًا لأنه سيكون مربعًا سحريًا بسيطًا وطبيعيًا ذو رتبة فردية، فسوف يحتوي على جميع العناصر numbers من 1 إلى 3^2 أو 9.

كيف تعمل؟

وفقا لدينا خوارزمية، ستكون الخطوات هي التاليةwing:

الخطوة 1) الرقم الأول أو 1 سيكون في الموضع (3/2، 3-1) أو (1، 2). وفقًا للاتفاقية، ضع في اعتبارك x= 1 و y= 2 لـ later خطوات.

خوارزمية لتوليد المربع السحري

الخطوة 2) الموقف بالنسبة لبقية numbers سيتم حسابها في فولوwing طريقة-

موقف رقم 2:

سيكون الرقم التالي عند (x-1, y+1) أو (0, 3)، وهو موضع غير صالح. وباستخدام الشرط (أ)، فإن الموضع الصحيح المقابل سيكون (0,0،0). إذن، س = 0، ص = XNUMX.

خوارزمية لتوليد المربع السحري

موقف رقم 3:

سيكون الرقم 3 عند (x-1, y+1) أو (-1, 1)، وهو موضع غير صالح. باستخدام الشرط (أ)، سيكون موضع الصف الصحيح هو n-1 أو 2. وبالتالي، سيكون الرقم 3 في (2، 1). بالنسبة للرقم التالي، x= 2، y= 1.

خوارزمية لتوليد المربع السحري

موقف رقم 4:

يجب أن يكون الرقم 4 عند (x-1, y+1) أو (1, 2) وهو موضع صالح. لكن هذا الموقف يحتوي بالفعل على رقم. ووفقاً للشرط (ب)، فإن الوضع الصحيح سيكون (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) وهو موضع غير صالح. ووفقا للشرط (ج)، فإن الموضع الصحيح سيكون (0، ن-2) أو (0، 1). بالنسبة للرقم التالي x=0، y=1.

خوارزمية لتوليد المربع السحري

موقف رقم 8:

يجب أن يكون الرقم 8 عند (x-1, y+1) أو (-1, 2) وهو موضع غير صالح. وباستخدام الشرط (أ)، فإن الموضع الصحيح سيكون (2، 2). بالنسبة للرقم التالي x= 2، y= 2.

خوارزمية لتوليد المربع السحري

موقف رقم 9:

يجب أن يكون الرقم 9 عند (x-1, y+1) أو (1, 3) وهو موضع غير صالح. وباستخدام الشرط (أ)، فإن الموضع الصحيح سيكون (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++ كود ماجيك سكوير

الإدخال:

/*
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

بايثون كود ماجيك سكوير

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

معplexتحليل اتي

  • كوم الفضاءplexإيتي: للحفاظ على مصفوفة المربع السحري، نحتاج إلى مصفوفة *n. لذلك، الفضاء كومplexستكون O(n^2).
  • الوقت كومplexإيتي: الكود الذي استخدمناه لإنشاء squ السحريares الرياضيات تتكون من حلقتين. يتم تشغيل الحلقة الخارجية لعدد n من المرات، ويتم تشغيل الحلقة الداخلية أيضًا لعدد n من المرات. في نهاية المطاف الوقت كومplexالوحدة هي O(n^2).