for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  

Список Форумов  :: Игры Разума
   :: Помощь сайту :: 

Магический квадрат
Зингер

Сообщений: 520
Откуда: Белгород
Дата: 15.03.11 18:12:28ОтветитьЦитировать
Здравствуйте. Помогите составить квадрат из цифр 1,2,...8 так чтобы каждая сторона квадрата равнялась 13.
P.S.За алгоритм отдельное спасибо.[attachment 11709 1.JPG]



Исправлено: Mitchman, 15.03.11 19:08
Ratings: 0 negative/0 positive


Вложения:
[1.JPG (4.5KB)]  

Re: Магический квадрат?
Зингер

Сообщений: 520
Откуда: Белгород
Дата: 15.03.11 18:14:11ОтветитьЦитировать
Извините, за такой страшный скриншот.
Ratings: 0 negative/0 positive

Re: Магический квадрат?
Mitchman
[Модератор]

Сообщений: 9471
Откуда: Николаев
Дата: 15.03.11 19:08:50ОтветитьЦитировать
Зингер
Извините, за такой страшный скриншот.
мог бы и сам отредактировать

------------------
а будни - это попросту антракт
Ratings: 0 negative/0 positive

Re: Магический квадрат?
Зингер

Сообщений: 520
Откуда: Белгород
Дата: 15.03.11 22:49:28ОтветитьЦитировать
Получилось методом научного тыка
1-7-5
4-6
8-3-2

Логику построения пока понять не могу.
И это 4 класс ... Что дальше то будет? [sm128]
Ratings: 0 negative/0 positive

Re: Магический квадрат?
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата: 16.03.11 14:04:34ОтветитьЦитировать
13 говорит о том, что либо 3 числа должны быть нечетными, либо одно на каждой грани.
Т.е. минимум 1 грань заполнена нечетными полностью.


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.




Исправлено: Влад Колосов, 16.03.11 14:06
Ratings: 0 negative/0 positive

Re: Магический квадрат
Goodwin

Сообщений: 3539
Откуда: Омск
Дата: 17.03.11 07:57:53ОтветитьЦитировать
Не алгоритм, но облегчение перебора:
1+2+3+4+5+6+7+8=36
13*4=52
52-36=16
Значить по углам стоят числа на сумму 16 (числа по углам считаются дважды)
Выбираем из восьми чисел четыре на эту сумму, расставляем их углам, дальше перебор.


------------------
Что мы знаем о лисе?
Ничего. И то не все.
(С)Б. Заходер
Ratings: 0 negative/0 positive

Re: Магический квадрат
ry

Сообщений: 1999
Дата: 18.03.11 11:34:24ОтветитьЦитировать
Задача, похоже, как раз на подбор значений - вряд ли в четвертом классе ребенок сможет самостоятельно составить универсальный алгоритм. Но рассуждать можно было бы примерно так:
1. Все суммы состоят из трех чисел от 1 до 8.
2. Попробуем составить сумму 13 из числа 1 и других слагаемых. Получим 2 возможных варианта: 1+4+8, 1+5+7. Значит, цифра один должна стоять в одном из углов квадрата, а другие цифры - по смежным сторонам в неизвестном порядке. В запасе остаются цифры 2,3,6.
3. Допустим, по одной стороне цифры стоят в порядке 1+4+8, тогда следующая сторона должна быть 8+3+2 или 8+2+3 (прочие цифры уже заняты).
4. Допустим, следующая сторона 8+3+2, тогда дальше возможен лишь вариант 2+6+5 и 5+7+1 (если идти по кругу), что дает решение задачи.
5. Проверим условие стороны 8+2+3, в этом случае дальше необходимо 3+6+4 - но цифра 4 уже занята, приходим к противоречию, отклоняем условие.
6. Проверим условие первой стороны 1+8+4, тогда следующая сторона 4+6+3, далее необходимо 3+2+8, но 8 занята - отклоняем условие.
В итоге имеем одно решение.
Ratings: 0 negative/0 positive

Re: Магический квадрат
sphinx

Сообщений: 22752
Откуда: Каменск-Уральски
Дата: 18.03.11 20:40:20ОтветитьЦитировать
Цитата:
Задача, похоже, как раз на подбор значений - вряд ли в четвертом классе ребенок сможет самостоятельно составить универсальный алгоритм. Но рассуждать можно было бы примерно так:
...
В итоге имеем одно решение.

Это рассуждения именно для 4 класса среднестатической средней школы? Вернее, следует поставить вопрос так: "Это точно задача для 4 класса, для решения которой необходимо провести следующие рассуждения?"




------------------
"Вы поступили правильно, мой друг, но, боюсь, совершили ошибку"..."(с)
Ratings: 0 negative/0 positive

Re: Магический квадрат
sergcastle

Сообщений: 4
Дата: 27.03.11 00:29:09ОтветитьЦитировать
1. 13 получиться только в том случае если в выражении есть числа 8,7,6 а так как сумм 4 шт, следовательно одно из этих чисел обязательно должно быть вершиной и формировать две суммы, оставшиеся формируют по одной (итого четыри суммы)
2. Расположение 8 и любого из 765 рядом на смежных вершинах или на одной грани недопустимо
3. Расположение 67 на смежных вершинах или на одной грани недопустимо
Учитывая это размещаем цифры
4. 8 можно использовать в двух суммах, располагаем в вершине
5. Учитывая п2 и п3 67 единственно возможное размещение только на противоположных от 8 гранях
6. Учитывая п2 единственно возможное размещение 5 на вершине противоположной вершине 8
7. Расставляем оставшиеся числа

Можно наверное немножко с другого конца, п1 п2 обязателен
с помощью 8 возможны две суммы 13, уже есть вершина, две смежные к ней грани и пять использованных цифр,
учитывая п3 раскладываем оставшиеся три цифры, возможен только один вариант где 5 в вершине
корректируем суммы в оставшихся вершинах
корректируем суммы на гранях смежных с вершиной 8
Ratings: 0 negative/0 positive

Re: Магический квадрат
bcook
Автор

Сообщений: 160
Дата: 22.05.11 17:14:55ОтветитьЦитировать
test.prg
А можно и банальным перебором:
  
  clear  
  declare mass(8)  
  FOR i=1 TO 8  
  	mass(i) = 0  
  ENDFOR  
    
  usl_1 = '!( mass(1)+mass(2)+mass(3) = 13 )'  
  usl_2 = '!( mass(3)+mass(5)+mass(8) = 13 )'  
  usl_3 = '!( mass(1)+mass(4)+mass(6) = 13 )'  
  usl_4 = '!( mass(6)+mass(7)+mass(8) = 13 )'  
  uslovie = usl_1 + ' or ' + usl_2 + ' or ' + usl_3 + ' or ' + usl_4   
  DO WHILE &uslovie  
  	DO generation	  
  	DO view_win	WITH 'nowait'   && для ускорения можно заремарить  
  ENDDO  
  DO view_win  
    
  PROCEDURE check_8	  
  	PARAMETERS pos, num  
  	FOR i=1 TO pos  
  		IF num = mass(i)  
  			RETURN .F.			  
  		ENDIF		  
  	ENDFOR		  
  	RETURN .T.  
  ENDPROC  
    
  PROCEDURE generation	&& 1-8  
  	n=0  
  	DO WHILE n<>7  
  		n=n+1		  
  		DO while .T.  
  			new = INT(RAND()*8)+1  
  			IF !INLIST(new,0,9) AND check_8(n,new)		  
  				mass(n)=new				  
  				Exit  
  			ENDIF			  
  		ENDDO		  
  	ENDDO  
  	FOR i = 1 TO 8  
  	IF !INLIST(i,mass(1),mass(2),mass(3),mass(4),mass(5),mass(6),mass(7))  
  		mass(8) = i  
  		RETURN		  
  	ENDIF  
  	ENDFOR	  
  ENDPROC  
    
    
  PROCEDURE view_win	  
  PARAMETERS no_wait  
  	IF parameters()=0  
  		no_wait = ''  
  	endif  
  	a1 = alltrim(STR(mass(1)))  
  	a2 = alltrim(STR(mass(2)))  
  	a3 = alltrim(STR(mass(3)))  
  	b1 = alltrim(STR(mass(4)))  
  	b2 = '  '  
  	b3 = alltrim(STR(mass(5)))  
  	c1 = alltrim(STR(mass(6)))  
  	c2 = alltrim(STR(mass(7)))  
  	c3 =alltrim(STR( mass(8)))  
  	  
  	WAIT WINDOW a1 + ' ' + a2 + ' ' + a3 + CHR(13) +;  
  				b1 + ' ' + b2 + ' ' + b3 + CHR(13) + ;  
  				c1 + ' ' + c2 + ' ' + c3  &no_wait  
  ENDPROC



Исправлено: bcook, 22.05.11 17:20
Ratings: 0 negative/0 positive



Извините, только зарегистрированные пользователи могут писать в этом форуме.

On-line: 47 leonid AndyNigmatec of63  and Guests: 44


© 2000-2019 Fox Club 
Яндекс.Метрика