[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: магический квадрат...
MatrixGod
всем нам с детства известен магический квадрат.
именно тот квадрат который надо заполнить числами от 1 до 9 без повторений,
так чтоб все столбцы по вертикали, горизонтали и диагонали равнялись в сумме 15.

лол! попробовал я написать скрипт который это дело подбирает.
но через 30 сек ошибка: "Fatal error: Maximum execution time of 30 seconds exceeded".

в общем, гляньте ка на этот код. может у кого-то появится более "быстрая идея"...
ЛОЛ! biggrin.gif

<?

for($x1 = 1; $x1 < 10; $x1++)
{
for($x2 = 1; $x2 < 10; $x2++)
{
for($x3 = 1; $x3 < 10; $x3++)
{
for($x4 = 1; $x4 < 10; $x4++)
{
for($x5 = 1; $x5 < 10; $x5++)
{
for($x6 = 1; $x6 < 10; $x6++)
{
for($x7 = 1; $x7 < 10; $x7++)
{
for($x8 = 1; $x8 < 10; $x8++)
{
for($x9 = 1; $x9 < 10; $x9++)
{
if(($x1 + $x2 + $x3 == 15) && ($x4 + $x5 + $x6 == 15) && ($x7 + $x8 + $x9 == 15) && ($x1 + $x4 + $x7 == 15) && ($x2 + $x5 + $x8 == 15) && ($x3 + $x6 + $x9 == 15) && ($x1 + $x5 + $x9 == 15) && ($x3 + $x5 + $x7 == 15) && (!($x1 = $x2 = $x3 = $x4 = $x5 = $x6 = $x7 = $x8 = $x9)))
{
echo("Solved. The numbers is: $x1 $x2 $x3 $x4 $x5 $x6 $x7 $x8 $x9");
exit();
}
}
}
}
}
}
}
}
}
}

?>




Спустя 2 минуты, 28 секунд (18.02.2010 - 00:00) MatrixGod написал(а):
и вообще, правильно ли я код написал?

Спустя 19 минут, 4 секунды (18.02.2010 - 00:19) Adil написал(а):

Спустя 8 минут, 29 секунд (18.02.2010 - 00:28) glock18 написал(а):
!($x1 = $x2 = $x3 = $x4 = $x5 = $x6 = $x7 = $x8 = $x9)



это никогда не даст true при положительных xn.

алгоритмически считается тоже неверно. перебирается 10 в 9 степени вариантов, а достаточно перебрать 9! вариантов - это чуть больше 360 000 или 3.6e5.

а вообще задача такого рода позволяет вести эвристический поиск, и таким образом количество вариантов можно сократить еще на несколько порядков.

и вообще, правильно ли я код написал?

пожалуй, синтаксически, да smile.gif

Спустя 4 минуты, 59 секунд (18.02.2010 - 00:33) MatrixGod написал(а):
glock18
лол! smile.gif

ну а математически как лучше его написать?

кстати, на счет "!($x1 = $x2 = $x3 = $x4 = $x5 = $x6 = $x7 = $x8 = $x9)"...

по какой-то причине пхп не хочет принимать "$x1 != $x2 != $x3 != $x4 != $x5 != $x6 != $x7 != $x8 != $x9" (а ведь это одно из условий задачи).

кстати, если это убрать вовсе то он все же дает ответ.
но ответ только частично правильный...

"Solved. The numbers is: 1 9 5 9 5 1 5 1 9" smile.gif

Спустя 33 минуты, 1 секунда (18.02.2010 - 01:06) glock18 написал(а):
= => ==

Спустя 8 дней, 22 часа, 55 минут, 15 секунд (27.02.2010 - 00:01) TakoY написал(а):
Цитата
по какой-то причине пхп не хочет принимать "$x1 != $x2 != $x3 != $x4 != $x5 != $x6 != $x7 != $x8 != $x9" (а ведь это одно из условий задачи).


причина не в пхп а в том что вы не правильно составили условие.
$x1 != $x2 != $x3 != $x4 != $x5 != $x6 != $x7 != $x8 != $x9

сначало проверяеться условие $x1 != $x2 и выдаеться ИСТИНА или ЛОШЬ
и потом этот результат [истина или лошь] != $x3 и так далее,
т.е. сравниваються не значения переменных а булевое значение с переменными



Спустя 29 минут, 11 секунд (27.02.2010 - 00:30) qpayct написал(а):
Попов отдыхает.... laugh.gif

Спустя 19 минут, 18 секунд (27.02.2010 - 00:50) Winston написал(а):
А на С++ не нужен маг. квадрат biggrin.gif

Свернутый текст

#include <conio.h>
#include <iostream.h>

main()
{
int A[3][3],C[6],a,b,i,c,j,s,e,p,max,d,d2;
for (i=0; i<=2; i++)
for (j=0; j<=2; j++)
{
cout << "\n\tA[" << i << "][" << j << "] = ";
cin>>A[i][j];
}
cout<<"\n";
for (i=0; i<=2; i++)
for (j=0; j<=2; j++)
{
cout<<"\t"<<A[i][j];
if (j==2)
cout<<"\n\n";
}
s=0;
e=0;
for (i=0; i<=e; i++)
for (j=0; j<=2; j++)
{
s=A[i][j]+s;
if (j==2)
{
cout<<"\n\tСумма "<<e+1<<" строчки = "<<s;
if (e<2)
e=e+1;
C[i]=s;
s=0;
}
}
cout<<"\n\n";
s=0;
e=0;
for (i=0; i<=e; i++)
for (j=0; j<=2; j++)
{
s=A[j][i]+s;
if (j==2)
{
cout<<"\n\tСумма "<<e+1<<" столбца = "<<s;
if (e<2)
e=e+1;
C[i+3]=s;
s=0;
}
}

d=0;
for (i=0; i<=2; i++)
d=d+A[i][i];
cout<<"\n\n\tСумма первой диагонали = "<<d;
C[6]=d;
d2=0;
for (i=0; i<=2; i++)
for (j=0; j<=2; j++)
{
if (i+j==2)
d2=d2+A[i][j];
}
cout<<"\n\n\tСума второй диагонали = "<<d2;
C[7]=d2;
cout<<"\n\n\n ";
p=0;

for (i=0; i<=6; i++)
if (C[i]==C[i+1])
{
p=p+1;}

if (p==7)
cout << "\n\n\tМатрица магическая !"

else cout<<"\n\n\tМатрица не магическая !";

getch();
}

Возможно код индусский, т. к. студенты писали.

Спустя 7 месяцев, 29 дней, 10 часов, 6 минут, 26 секунд (26.10.2010 - 09:56) elle написал(а):
PHPprogramer....
.вот именно такой то и нужен тока не понимаю в нем ничего и не запускается он
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.