Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: массив (java)  (Прочитано 18349 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ZWYHB
Участник

ru
Offline Offline

« : 25-04-2010 13:57 » new

Задаётся последовательность солдат
Они стоят произвольно
Если солдат видит перед собой лицо - то он разварачивается,
если затылок - то остаётся на месте
Все поворачиваются одновременно
Через некоторое количество шагов все устаканивается - то есть каждый видит затылок

Никак не получается реализовать вот именно сами эти повороты
есть массив солдат с их направлениями. Создаем еще один массив той же длины, проходишь по первому массиву и по нему (по указанным правилам) генерируем числа для второго массива. Далее второй массив становится исходным для следующего шага.

Может у кого - нить есть похожие задачки или для этой помогите с реализацией
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 25-04-2010 14:20 » 

ZWYHB, объекту класса СSoldier приделай булево свойство "NeedTurn".

1) пробегаешься по массиву и взводишь NeedTurn там, где надо повернуть, а где не надо - сбрасываешь.
2) пробегаешься по массиву ещё раз и разворачиваешь того, у кого NeedTurn==true


а если ещё чуточку подумать, то NeedTurn не требуется вовсе, и разворот делается в один пробег по массиву Улыбаюсь
« Последнее редактирование: 25-04-2010 14:24 от Алексей1153++ » Записан

ZWYHB
Участник

ru
Offline Offline

« Ответ #2 : 25-04-2010 14:25 » 

а если ещё чуточку подумать, то NeedTurn не требуется вовсе и разворот делается в один пробег по массиву Улыбаюсь
Алексей1153++,  а вот если чуточку подумать, с помощью чего сделать разворот в один пробег
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 25-04-2010 14:42 » 

ZWYHB, вообще-то, это предлагается сделать тебе ))
Записан

ZWYHB
Участник

ru
Offline Offline

« Ответ #4 : 25-04-2010 14:48 » 

Алексей1153++,  спасибо конечно
но я это и немогу сделать - нужна гениальная идея))
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 25-04-2010 15:04 » 

для начала нужно определиться вот в чём: если перед солдатом нет никого, что он должен сделать ?
Записан

ZWYHB
Участник

ru
Offline Offline

« Ответ #6 : 25-04-2010 16:39 » 

остаться на месте
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 26-04-2010 03:23 » 

тогда в общем случае алгоритм не работает: если в начале строя и в конце солдаты будут смотреть на горизонт, то они так и останутся стоять, а кто-то из них будет повёрнут затылком к затылку сослуживца
Записан

Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #8 : 26-04-2010 08:32 » 

тогда в общем случае алгоритм не работает
Почему?..
...если в начале строя и в конце солдаты будут смотреть на горизонт, то они так и останутся стоять, а кто-то из них будет повёрнут затылком к затылку сослуживца
... что значит, что решение найдено Улыбаюсь

Алексей1153++, и кстати, на счет пробега за один раз... Можно реализовать разве что рекурсией или с помощью контейнера. Но в таком случае, исходя из того, что размер массива не очень большой (надеюсь там не целый фронт Улыбаюсь ), лучше применить вариант с NeedTurn, он вполне красиво впишеться в задачу Улыбаюсь . А вот менять сразу нельзя (используя один проход), так как нарушается условие задания.

Дополнение:
Алексей1153++, кстати, а почему CSoldier? Это же Java - JSoldier  Отлично
« Последнее редактирование: 26-04-2010 08:35 от YevhenUA » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 26-04-2010 08:45 » 

Почему?..

ну смотри: (уголок - это нос солдата, вид на строй всерху)

Код:
0  1  2  3
<  <  <  >

0-й и 3-й солдаты не двигаются. На рисунке - конечный результат. Это разве по твоему заданию ? ИМХО, нужно добавить дополнительное условие: если солдат смотрит в пустоту, то обратить внимание, на что нацелен его затылок


Цитата
Можно реализовать разве что рекурсией или с помощью контейнера
можно, наверное, но нет смысла, вроде бы )) Обычный цикл, один проход на один шаг-разворот
Только надо запоминать предыдущие состояния (i-1)-го и (i-2)-го солдата для расчёта (i)-го.


 CSoldier - а я Java не знаю, я на С++ шпарю )
« Последнее редактирование: 26-04-2010 08:50 от Алексей1153++ » Записан

Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #10 : 26-04-2010 17:13 » 

Через некоторое количество шагов все устаканивается - то есть каждый видит затылок
Ну если это обязательное условие - тогда да:
тогда в общем случае алгоритм не работает
.
... иначе все нормально.

Цитата
можно, наверное, но нет смысла, вроде бы )) Обычный цикл, один проход на один шаг-разворот
Только надо запоминать предыдущие состояния (i-1)-го и (i-2)-го солдата для расчёта (i)-го.
Можно конечно, но где или как запоминать состояния. Это усложнение. Я за NeedTurn  Да-да
« Последнее редактирование: 26-04-2010 17:16 от YevhenUA » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 27-04-2010 05:26 » 

Цитата
Можно конечно, но где или как запоминать состояния.
Парочка локальных булевых переменных. Где же усложнение ? Или в Java нельзя локальные переменные ?
Записан

pilferer
Гость
« Ответ #12 : 28-04-2010 17:31 » 

чистая геометрия...  Дрожу
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #13 : 29-04-2010 04:34 » 

pilferer, что расскажешь? Внимательно слушаем Улыбаюсь
Записан

pilferer
Гость
« Ответ #14 : 29-04-2010 18:29 » 

это можно сделать геометрально. У меня есть маленькая программка под DOS (идет под эмулятором), в ней есть все что нужно чтоб решить эту задачку. И я могу сделать график с объектами (двумерными), где показать что и как переходит. Все это всместе и будет решение. вот.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #15 : 29-04-2010 18:34 » 

pilferer, как связаны DOS и Java ? )) Да и вообще не в языке дело - опиши ему русскими словами алгоритм и всё будет хорошо )
Записан

pilferer
Гость
« Ответ #16 : 29-04-2010 18:47 » 

Алексей1153++, может программку скинуть? она на асме, но маленькая. И графики?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #17 : 29-04-2010 18:52 » 

pilferer, а смысл ? Ну прикрепи, если без вирусов, небольшая и сильно хочется )))
Записан

pilferer
Гость
« Ответ #18 : 29-04-2010 18:54 » 

Алексей1153++, она у меня на винте который лежит в шкафу. Может завтра часикам к 18.00?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #19 : 29-04-2010 19:01 » 

pilferer, ждём не дождёмся увидеть сей шедевер ))
Записан

pilferer
Гость
« Ответ #20 : 30-04-2010 17:00 » 

Вот сам файл. Чтоб посмотреть, нужно откомпить. Содержит в себе изменяемый скелет. Основа, так сказать, приближенная. Графики и "соитие" будут чуть позже.

* RectangleMovn.asm (2.94 Кб - загружено 881 раз.)
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines