LINUX.ORG.RU
ФорумTalks

Несложная задачка «на поржать под пиво»


0

4

Задачка широко известна в узких кругах, поэтому кто знает ответ, то будьте людьми — просто ржите над комментариями.

Итак:
3 рыбака легли спать, не поделив улова.
Проснувшийся ночью первый рыбак решил уйти, взяв свою долю. Но число рыб не делилось на три. Тогда он выбросил одну, а из остатка забрал треть.
Второй и третий рыбаки поступили аналогично.
Спрашивается, какое наименьшее количество рыб может удовлетворить условию задачи.

★★☆

Если после выбрасывания одной рыбы их количество таки делится на 3, то остальным нет необходимости уже выбрасывать рыбу - оставшиеся 2/3 замечательно делятся пополам. Так что, 4.

KendovNorok
()
Последнее исправление: KendovNorok (всего исправлений: 1)
Ответ на: комментарий от Medar

Ты где там противопоставление увидел?

Gotf ★★★
()
Ответ на: комментарий от Medar

Псевдограммар-наци в треде!
«Несложно» и «не сложно» различные, хотя и близкие, понятия...
Первое синоним слова «просто», а второе лишь говорит о том, что что-то не является сложным, но ничего не говорит о простоте.
А теперь кыш из треда, позорище...

Stahl ★★☆
() автор топика
Ответ на: комментарий от KendovNorok

Если после выбрасывания одной рыбы их количество таки делится на 3, то остальным нет необходимости уже выбрасывать рыбу - оставшиеся 2/3 замечательно делятся пополам.

Наверное второй рыбак не знал, что первый уже свалил, а третий не знал, что двоих уже нет.

Lavos ★★★★★
()
Ответ на: комментарий от KendovNorok

Согласись, что такой ответ был бы слишком прост?
Думай дальше — из этой задачки можно ещё кой-чего выдумать...

Stahl ★★☆
() автор топика
Ответ на: комментарий от Lavos

Да, они не котролировали друг друга.

Stahl ★★☆
() автор топика

Второй и третий рыбаки поступили аналогично.

Непонятно, входит ли «число рыб не делилось на три» в это «аналогично». И непонятно, является ли выкидывание рыбы обязательным условием. Знали ли второй и третий рыбак, что их осталось меньше?

Вообще так (вроде динамическое программирование):

<сколько оставил> <сколько было после выкидывания рыбы> <сколько было до выкидывания рыбы> 
3й: 0 1 1 (остался один, забрал всё)
2й: 1 2 3
1й: 3 9 10

Ответ: 10

crowbar
()
Ответ на: комментарий от KendovNorok

Если после выбрасывания одной рыбы их количество таки делится на 3, то остальным нет необходимости уже выбрасывать рыбу - оставшиеся 2/3 замечательно делятся пополам. Так что, 4.

+!

Bad_ptr ★★★★★
()
Ответ на: комментарий от Adonai

Ну я же просил быть человеком.
А ты? Вот так и развлекай вас...
Это раз.
А во-вторых твой ответ неверный.

Stahl ★★☆
() автор топика

Система x%3 = 1, ((x-1)*2/3)%3 = 1, (((x-1)*2/3-1)*2/3)%3 = 1, где x > 0. Итого 25. Это при условии, что каждый рыбак не осведомлён о том, что другие ушли (последний не забирает всё).

Sadler ★★★
()
Последнее исправление: Sadler (всего исправлений: 1)
Ответ на: комментарий от Medar

а теперь знаю. Спасибо.

Так это же офигительно.
Ты думаешь нам, граммар-наци, нравится смешивать людей с говном?
Вовсе нет. Просто мы пытаемся сделать мир хоть чуточку лучше. Или, во всяком случае, понятней.

Stahl ★★☆
() автор топика
Ответ на: комментарий от Lavos

Наверное второй рыбак не знал, что первый уже свалил, а третий не знал, что двоих уже нет.

Слепые рыбаки - это забавно.

devl547 ★★★★★
()
Ответ на: комментарий от devl547

Чёрной ночью чёрные негры ловят чёрную рыбу.

sin_a ★★★★★
()
Ответ на: комментарий от Sadler

Дирак

А-а... Так ты знаешь эту задачку. Так не интересно...
Да не идиот он. Он просто тыкал людей мордой в границы, которые создавались искусственно с помощью закостенелости мышления.

Stahl ★★☆
() автор топика
Ответ на: комментарий от Stahl

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

Sadler ★★★
()
Последнее исправление: Sadler (всего исправлений: 1)

Эммм... Немного не понял условие:

  • Второй рыбак забрал 1/2 остатка?
  • Если да, то делился ли этот остаток на 2?
  • Если не делился, то выбросил ли он одну рыбу?
CYB3R ★★★★★
()
Ответ на: комментарий от Stahl

В задаче есть очевидное ограничение «число рыб >= 0»

crowbar
()
Ответ на: комментарий от Stahl

Предлагаю в качестве дополнительной задачи найти наиболее короткий (по числу производимых операций) критерий проверки числа рыб X на условие задачи.

Моё предположение: (4/9 * x - 10/9 ) % 3 = 1

Sadler ★★★
()
Последнее исправление: Sadler (всего исправлений: 1)
Ответ на: комментарий от Sadler

Пихать сюда антирыб не было никакого смысла.

Знаешь, хрен с ней, с задачкой-то...
Давай я тебе байку расскажу. С задачкой Дирака я познакомился из одной старой около-ITшной книжонки самого начала девяностых.
И там рядом этой задачкой была другая.
Подробности её не помню, но суть такова:
Есть завод по производству компов. Компы бывают нескольких типов. Для производста различных типов компов нужно различное количество различной степени дефицитности микросхем.
Задача стояла произвести компов из имеющихся микросхем на максимальную сумму.
В программе была ошибка и некоторые граничные значения не проверялись. И программа выдала, что надо сделать X компов типа 1, Y компов типа 2, -1 комп типа 3, и дохрена компов типа 4.
И за это будет получено дохрена денег!
Что? Бред? Хрень? Что за -1 комп?
Но из некоторых ошибок можно вынести пользу — этот 1 комп можно прикупить на стороне, разукомплектовать его на запчасти и перевыполнить план.
Вот тебе и антикомпы.

Stahl ★★☆
() автор топика
Ответ на: комментарий от Stahl

Это всё понятно. Ошибки в граничных условиях иногда полезны. Но не возводить же их в ранг правильного решения за это :) Мы ведь за идеальный мир, где экономика не требует разукомплектовывать купленные на стороне машины.

Sadler ★★★
()
Последнее исправление: Sadler (всего исправлений: 2)
Ответ на: комментарий от Sadler

Ну ты же понимаешь, что без этой «изюминки» задачка не потянула бы и на школьную олимпиаду среди средних классов?

Stahl ★★☆
() автор топика
Ответ на: комментарий от crowbar

3й 2 1 единица не делится на 3 ???

Третий рыбак не знает, брал ли кто рыбу до него, или нет. Третий рыбак пришел, увидел что лежит две рыбы. Посчитал что две рыбы на три не делится - выкинул одну, тем самым обездолив одного из рыбаков и единственный остался с добычей? Вопрос - сколько выпили рыбаки?

Siado ★★★★★
()
Последнее исправление: Siado (всего исправлений: 1)

выбросил совсем или не стал учитывать при выделении трети?

cvs-255 ★★★★★
()
Ответ на: комментарий от Sadler
(8*x - 38) % 27 == 0
> filter (\x -> (8*x - 38 ) `mod` 27 == 0) [(-100)..100]
[-83,-56,-29,-2,25,52,79]

Твоя формула выдаёт неверный результат:

> filter (\x -> (4 * x - 10 )`div` 9 `mod` 3 == 1) [(-10)..52]
[-8,-7,-2,-1,0,5,6,12,13,19,20,25,26,27,32,33,39,40,46,47,52]

adzeitor
()
Ответ на: комментарий от bender

Да уже решилась.
Уже даже обсудили почему задача — говно, а решение нелепо:)

Stahl ★★☆
() автор топика

Второй и третий рыбаки поступили аналогично.

это под пиво? ого

Sonsee
()

а если первый вернулся с пивом ?

x905 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.