| 
			| 
					
						| ZWYHB 
								Участник    Offline | 
								|  | «  : 25-04-2010 13:57 »  |  | 
 
 Задаётся последовательность солдатОни стоят произвольно
 Если солдат видит перед собой лицо - то он разварачивается,
 если затылок - то остаётся на месте
 Все поворачиваются одновременно
 Через некоторое количество шагов все устаканивается - то есть каждый видит затылок
 
 Никак не получается реализовать вот именно сами эти повороты
 есть массив солдат с их направлениями. Создаем еще один массив той же длины, проходишь по первому массиву и по нему (по указанным правилам) генерируем числа для второго массива. Далее второй массив становится исходным для следующего шага.
 
 Может у кого - нить есть похожие задачки или для этой помогите с реализацией
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #1 : 25-04-2010 14:20 »  |  | 
 
 ZWYHB, объекту класса СSoldier приделай булево свойство "NeedTurn". 1) пробегаешься по массиву и взводишь NeedTurn там, где надо повернуть, а где не надо - сбрасываешь. 2) пробегаешься по массиву ещё раз и разворачиваешь того, у кого NeedTurn==true а если ещё чуточку подумать, то NeedTurn не требуется вовсе, и разворот делается в один пробег по массиву   |  
						| 
								|  |  
								| « Последнее редактирование: 25-04-2010 14:24 от Алексей1153++ » |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| ZWYHB 
								Участник    Offline | 
								|  | « Ответ #2 : 25-04-2010 14:25 »  |  | 
 
 Алексей1153++а если ещё чуточку подумать, то NeedTurn не требуется вовсе и разворот делается в один пробег по массиву  ,  а вот если чуточку подумать, с помощью чего сделать разворот в один пробег |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #3 : 25-04-2010 14:42 »  |  | 
 
 ZWYHB, вообще-то, это предлагается сделать тебе )) |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| ZWYHB 
								Участник    Offline | 
								|  | « Ответ #4 : 25-04-2010 14:48 »  |  | 
 
 Алексей1153++,  спасибо конечноно я это и немогу сделать - нужна гениальная идея))
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #5 : 25-04-2010 15:04 »  |  | 
 
 для начала нужно определиться вот в чём: если перед солдатом нет никого, что он должен сделать ? |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| ZWYHB 
								Участник    Offline | 
								|  | « Ответ #6 : 25-04-2010 16:39 »  |  | 
 
 остаться на месте |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #7 : 26-04-2010 03:23 »  |  | 
 
 тогда в общем случае алгоритм не работает: если в начале строя и в конце солдаты будут смотреть на горизонт, то они так и останутся стоять, а кто-то из них будет повёрнут затылком к затылку сослуживца |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Dr.Yevhenius | 
								|  | « Ответ #8 : 26-04-2010 08:32 »  |  | 
 
 тогда в общем случае алгоритм не работает
 Почему?.. ...если в начале строя и в конце солдаты будут смотреть на горизонт, то они так и останутся стоять, а кто-то из них будет повёрнут затылком к затылку сослуживца
 ... что значит, что решение найдено   Алексей1153++ , и кстати, на счет пробега за один раз... Можно реализовать разве что рекурсией или с помощью контейнера. Но в таком случае, исходя из того, что размер массива не очень большой (надеюсь там не целый фронт    ), лучше применить вариант с NeedTurn, он вполне красиво впишеться в задачу    . А вот менять сразу нельзя (используя один проход), так как нарушается условие задания.Дополнение:Алексей1153++ , кстати, а почему CSoldier? Это же Java - JSoldier    |  
						| 
								|  |  
								| « Последнее редактирование: 26-04-2010 08:35 от YevhenUA » |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #9 : 26-04-2010 08:45 »  |  | 
 
 Почему?..
 ну смотри: (уголок - это нос солдата, вид на строй всерху) 0-й и 3-й солдаты не двигаются. На рисунке - конечный результат. Это разве по твоему заданию ? ИМХО, нужно добавить дополнительное условие: если солдат смотрит в пустоту, то обратить внимание, на что нацелен его затылок  Можно реализовать разве что рекурсией или с помощью контейнера
 можно, наверное, но нет смысла, вроде бы )) Обычный цикл, один проход на один шаг-разворот Только надо запоминать предыдущие состояния (i-1)-го и (i-2)-го солдата для расчёта (i)-го.  CSoldier - а я Java не знаю, я на С++ шпарю ) |  
						| 
								|  |  
								| « Последнее редактирование: 26-04-2010 08:50 от Алексей1153++ » |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Dr.Yevhenius | 
								|  | « Ответ #10 : 26-04-2010 17:13 »  |  | 
 
 Через некоторое количество шагов все устаканивается - то есть каждый видит затылок
 Ну если это обязательное условие - тогда да: тогда в общем случае алгоритм не работает
 . ... иначе все нормально. можно, наверное, но нет смысла, вроде бы )) Обычный цикл, один проход на один шаг-разворотТолько надо запоминать предыдущие состояния (i-1)-го и (i-2)-го солдата для расчёта (i)-го.
 
 Можно конечно, но где или как запоминать состояния. Это усложнение. Я за NeedTurn    |  
						| 
								|  |  
								| « Последнее редактирование: 26-04-2010 17:16 от YevhenUA » |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #11 : 27-04-2010 05:26 »  |  | 
 
 Можно конечно, но где или как запоминать состояния.
 Парочка локальных булевых переменных. Где же усложнение ? Или в Java нельзя локальные переменные ? |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| pilferer 
								Гость
 | 
								|  | « Ответ #12 : 28-04-2010 17:31 »  |  | 
 
 чистая геометрия...    |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #13 :  29-04-2010 04:34 »   |  | 
 
 pilferer, что расскажешь? Внимательно слушаем   |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| pilferer 
								Гость
 | 
								|  | « Ответ #14 : 29-04-2010 18:29 »  |  | 
 
 это можно сделать геометрально. У меня есть маленькая программка под DOS (идет под эмулятором), в ней есть все что нужно чтоб решить эту задачку. И я могу сделать график с объектами (двумерными), где показать что и как переходит. Все это всместе и будет решение. вот. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #15 : 29-04-2010 18:34 »  |  | 
 
 pilferer, как связаны DOS и Java ? )) Да и вообще не в языке дело - опиши ему русскими словами алгоритм и всё будет хорошо ) |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| pilferer 
								Гость
 | 
								|  | « Ответ #16 : 29-04-2010 18:47 »  |  | 
 
 Алексей1153++, может программку скинуть? она на асме, но маленькая. И графики? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #17 : 29-04-2010 18:52 »  |  | 
 
 pilferer, а смысл ? Ну прикрепи, если без вирусов, небольшая и сильно хочется ))) |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| pilferer 
								Гость
 | 
								|  | « Ответ #18 : 29-04-2010 18:54 »  |  | 
 
 Алексей1153++, она у меня на винте который лежит в шкафу. Может завтра часикам к 18.00? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #19 : 29-04-2010 19:01 »  |  | 
 
 pilferer, ждём не дождёмся увидеть сей шедевер )) |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| pilferer 
								Гость
 | 
								|  | « Ответ #20 : 30-04-2010 17:00 »  |  | 
 
 Вот сам файл. Чтоб посмотреть, нужно откомпить. Содержит в себе изменяемый скелет. Основа, так сказать, приближенная. Графики и "соитие" будут чуть позже. |  
						| 
								| 
 |  
								|  |  Записан | 
 |  |  | 
	|  |