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 » |
|
а если ещё чуточку подумать, то NeedTurn не требуется вовсе и разворот делается в один пробег по массиву Алексей1153++, а вот если чуточку подумать, с помощью чего сделать разворот в один пробег
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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 » |
|
Вот сам файл. Чтоб посмотреть, нужно откомпить. Содержит в себе изменяемый скелет. Основа, так сказать, приближенная. Графики и "соитие" будут чуть позже.
|
|
|
Записан
|
|
|
|
|