Задача Майхилла

Определите, как нужно действовать стрелкам, построенным в шеренгу, чтобы одновременно открыть стрельбу, если команда "Огонь!" подается крайнему в шеренге, а обмен информацией разрешается только между соседними стрелками. 

Ответ: Каждый стрелок должен руководствоваться следующим набором указаний:

1. Если ты левофланговый и получил приказ "Шеренга, пли!", то запомни число 1 - свой порядковый номер - и ровно через секунду сообщи его соседу справа.

2. Если ты неправофланговый и сосед слева сообщил тебе число V, запомни число V+1 - свой порядковый номер - и ровно через секунду сообщи его соседу справа.

3. Если ты правофланговый и сосед слева сообщил тебе число n-1, то ровно через секунду ответь ему: "Готов!" и приступай к обратному счету в уме: n, n-1, n-2, ..., отсчитывая по одному числу в секунду.

4. Если ты не правофланговый и сосед справа доложил тебе: "Готов!", то ровно через секунду приступай к обратному счету в уме: V, V-1, V-2, ..., где V - твой порядковый номер, отсчитывая по одному числу в секунду. При этом, если V>1, т.е. если ты не левофланговый, то ровно через секунду после получения сообщения от соседа справа доложи: "Готов!" соседу слева.

5. Досчитав до нуля, стреляй!

Ваша оценка: Нет Средняя: 2.3 (65 оценки)


Комментарии

По мне, так пусть пересчитаются, а когда очередь дойдет до крайнего, он повторит свое число, это будет сигналов мослу, в следующий раз оба начнут отсчет обратно, а так как третий с краю услышит повтор числа соседа, то и сам начет обратный отсчет, и так далее. К единице считать будут все и на счет ноль все выстрелят. Возможно это повтор решения, но я так увидел, без секунд. Иван

Так, да не так, то что они должны пересчитаться, это да, и договорится, что когда счет закончится они выстрелят, ну скажем стрелять по команде "ноль!!!".

Ситуация следующая, командир говорит "Огонь!", крайний солдат начинает считать в обратном порядке, скажем "десять", рядом сосед слышит десять и они уже уже вместе повторяю "девять", со следующим соседом ситуация аналогичная..., пока все не скажут команду "ноль" и не выстрелят.

тупо досчитав до нуля крикнуть.

Не ставьте из так(вид сверху):
2 1 1 1 1 1 1 1

а построить их так(вид сверху):
1 1 1 1 1 1 1
2

1- стрелок
2- командующий
соответственно каждый одновременно является первым!!т.к. командующий скраю.
такое решение возможно при данной формулировке.

По формулировке - команда дается крайнему в шеренге. А командующий может хоть сверху залезть, сути не меняет.

Ставить так)
11111111111111111
2
Если поставить так то именно в этом случае все бойцы будут Одновременно слышать приказ.

Некорректное условие. Где в условии задачи говорится о том, что каждый стрелок должен сначала крикнуть готов, а потом открыть огонь? С такими допущениями я могу тут напридумывать кучу условий. А сама задачка ничего.

просто пусть в соседа стреляет!!!)

мне каж более просто решить: каждому стрелку присвоить порядковый номер - 1,2,3, и т.д. Условно - общее кол-во стрелков 7. Приказ получает 1-ый - пусть это правый фланг. ПРи этом , он знает, что помимо него еще 6 стрелков и информация "огонь" к соседнему доходит за 1 секунду. Значить до 7-го стрелка информация дойдет через 6 секунд. Соответственно 2-ой стрелок знает, что помимо него до левого фланга 5 стрелков и информация дойдет до 7 стрелка за 5 секунд и т.д. Передавая др др информацию за одну секунду каждый стрелок отсчитывает про себя количество секунд, которое равно количеству стрелков до левого фланга и следовательно, они выстрелят одновременно. А ТЕПЕРЬ МОЖНО МНЕ ПРЕМИЮ.

Задача очень даже интересная ^_^ есть не в полне разумное , но всё же какое не какое решение если ну скажем правфланговому дать в руки не ружьё , а пистолет ну или просто сделать правофланговым какого нить атлета который сможет держать ружьё в одно руке то ему будет проще после получения приказа опустить поднятую руку :)

по моему, всё горздо проще.. Эхо используется для связи единства..

Надо им кругом встать))

кругом стать, желательно спинами внутрь круга, что бы друг друга не перестрелять:))
Но тогда подающий команду "Огонь", должен лечь на землю:))

п.с. Оу, решение действительно какое-то математическое

командуещиму надо встать с левого края(например)а крикнуть огонь стрелку с правого края))так же не уточняеться с какого края он стоит и с какого края стоит стрелок которому он говорит,а что бы тот стрелок из другого конца ширенги услышал, надо крикнуть,так и все услышат.

или ВСЕМ взять и включить рации и поставить их на режим(ну когда слушают,на этот режим)а крайнему поставить на режим когда надо говорить)))

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

Дык можно передать шеренге, что стреляем вместе когда будет стрелять последний стрелок

Нужно знать, сколько человек в шеренге. Допустим, 10. Крайний получает команду, говорит соседу "10" и продолжает отсчитывать про себя (9, 8, 7, ...). Следующий через секунду говорит соседу "9" и тоже отсчитывает про себя. После того, как каждый досчитает до конца - будет общий выстрел. По-моему, это проще, чем ответ автора, который я вообще не до конца понял)

А если количество солдат неизвестно? 

Вы бы придумывали задачи просто с цифрами.Математика- наука точная,а увас всё если бы да кабы.И вообще-команда "Огон"
отдаётся гроким командным криком,чтобы все слышали.

1. Нумеровка строя для определения общего количества игроков. Для этого каждый передает свой номер начиная с того кто получил команду огонь. В итоге последний знает свой номер - это КОЛИЧЕСТВО игроков.
2. Передача КОЛИЧЕСТВА назад к первому игроку. Число повторяет каждый одно и то же. В результате до первого доходит номер последнего.
3. А далее как в сообщении ниже: Крайний получает команду, говорит соседу "10" и продолжает отсчитывать про себя (9, 8, 7, ...). Следующий через секунду говорит соседу "9" и тоже отсчитывает про себя. После того, как каждый досчитает до конца - будет общий выстрел.

вообще данных не хватает... какие операции доступны каждому из участников?

У вас тут не солдаты, а хронометры какие-то, их бы поберечь надо, они могут сигналы точного времени подавать (:

Условия, правда, тоже чересчур надуманные...

В общем, на мой взгляд, самый простой вариант таков.

0. Солдаты заранее или по отдельной команде прикладывают левую руку к правому плечу соседа, а также делают расчёт с конца на начало(каждый запоминает свой номер).
10. По команде "начали"**, ближний к командующему солдат бьёт следующего в плечо столько раз, сколько солдат в шеренге ( это его собственный порядковый номер).
20. Второй и последующие бьют следующего, как почувствуют удар сами, при этом считая полученные удары (похлопывания по плечу)
30. Каждый начинает стрельбу в момент получения удара равному его собственному номеру или, наоборот, отсчитывает от своего номера в обратном порядке - кому как удобно.
??????
Огонь!!1один

Погрешность будет минимальна, встроенные в головной мозг хронометры не нужны, сработает даже для большого числа солдат.

**какое уж тут "огонь", когда такая задержка будет...

гы, я понял, тут все себе какое-то крохотное количество стрелков представляли. Я человек на 100 рассчитывал, никак не меньше ))

Ещё к плюсам моего варианта, он быстрее. Так как первый может и чаще раза в секунду действовать, раза в два чаще.

"бьёт следующего в плечо столько раз, сколько солдат в шеренге" ))))))))))))))))))а если тысяча человек будет стоять. Тысяча ударов в плечо?

Первый в шеренге говорит: " Расчитываемся. Первый... Последний сообщает общее количество человек обратно" Когда вернется информация первому все будут знать свой порядковый номер и общее количество человек N. Первый говорит: "После команды ОГОНЬ стреляем с задержкой N - "порядковый номер" секунд. Первый выдерживает N секунд (чтобы информация дошла до конца), командует ОГОНЬ и начинает считать N секунд, когда доходит до 0 стреляет залпом вместе со всеми. И фланги здесь непричем. Ответ считаю слишком запутанным и в реале не действующем.

Какая разница какой фланг? Задача не полная, есть несколько способов решения, в зависимости от того как передается информация и ведется хронометраж и что нужно минимизировать.

1. Время первого выстрела 2t(N-1), время последующих выстрелов t(N-1)
где N - количество стрелков, t - время передачи информации от одного стрелка к другому.

Пусть i это один стрелок из N, то есть i = {1,2...N}
Алгоритм: При команде "огонь!" первый сообщает соседу свой порядковый номер, каждый следующий стрелок сообщает тоже свой порядковый номер соседу, когда доходит до последнего, тот передает обратно свой номер. Каждый стрелок получает номер последнего N от соседа. При получении этой информации он должен будет выстрелить через t(i-1). После первого выстрела у каждого стрелка сохранился его номер i и номер последнего N, при следующей команде "огонь!" стрелок i передаcт информацию соседу и, сделав отчет, выстрелит через t(N-i)

Алгоритм стрелков

Стрелок № 1 (получающий команду "Огонь!")

Сказать соседу - "Первый"
При получении от этого же соседа команды "N" - тут же выстрелить (то есть стрелок называет количество солдат)

Если это не первый выстрел
Выстрелить через время равное t(N-1), сказать соседу "пли"

Стрелок № i

Получив от соседа - "i-1" (то есть сосед ему называет свой порядковый номер, например "пятый"),запомнить число i, сказать другому соседу - "i" (то есть назвать свой порядковый номер, например "шестой")
Получив от соседа команду - "N" (то есть стрелок называет количество солдат, например "десять"), запомнить число N, выстрелить через время равное t(i-1) и сообщить соседу команду "N".

Получив от соседа команду "Пли"
Выстрелить через время равное t(N-i), сказать соседу "пли"

Стрелок № N
Получив от соседа команду - "N-1" (например девятый), запомнить число N, выстрелить через время равное t(N-1) и сообщить соседу команду "N".

задача и решение - бред. как солдаты должны синхронно отсчитывать РОВНО секунду, две, три,.....7000 секунд?
лучшее решение - первый сказал 10, вместе с соседом 9, втроем - 8, в четвером 7..... при 0 стреляй. но тут предварительно нужно знать сколько солдат в шеренге. а в условии этого нет. вести пересчет предварительный..... вобщем бред какой-то

Это армия, сынок!

Чтобы отмерить "ровно секунду" нужны часы с секундной стрелкой, а имея часы, можно договориться стрелять на определенное время.