ajkj2em писал(а):
есть другой вариант задачи, менее тривиальный.
человеков - три.
шапок - пять, две черных и три белых.
всем троим надевают белые.
самый умный догадывается, что у него белая. вопрос - как ?
Раз на то пошло, вот тогда еще менее тривиальный вариант (хотя и ближе к программированию чем к логике):
Дано: сколько человек (до 75), сколько разных цветов (от 2 до 5), сколько шапок каждого цвета (от 1 до 15), сколько шапок каждого цвета надето. Например предыдущую задачу можно описать как (3 человека, 2 шапки, всего: {2 черных, 3 белых}, надето: {0 черных, 3 белых}).
Каждый человек знает сколько всего есть разных шапок и видит шапки надетые на других. Каждого спрашивают, знают ли они цвет своей шапки (предполагается что каждый в совершенстве владеет логикой). Если кто-то ответил "нет", всех спрашивают опять и так далее пока все не ответят вместе "да".
Задача: написать программу которая овечает на вопрос, "сколько раз потребуется спросить, пока все не догадаются какого цвета их шапка" для любого допустимого ввода?
Пример с той же задачей - после первого вопроса получаем ответы {"нет", "нет", "нет"}. После второго тоже самое. После третьего, каждый может догадаться что на нем белая шапка (то же самое рассуждение) и ответы будут {"да", "да", "да"}. Значит, овет - 3.