воскресенье, 26 февраля 2012 г.

Пример 3: задача про коварного маленького мальчика и 2 числа

Приветствую!

Один маленький мальчик загадал два различных числа. Оба — строго больше 1 и строго меньше 100, натуральные. Одному мальчику он сказал сумму этих чисел, другому — их произведение. Прошла неделя, и два мальчика встретились. Тот, кто знал произведение, говорит: «Ты знаешь, мне не хватает данных, чтобы определить, что за числа загадал маленький мальчик». — «А я знал, что тебе не хватит данных!» — ответил тот, кто знал сумму. — «Тогда я понял, что за числа он загадал», — сказал тот, кто знал произведение. — «Тогда и я понял...» — сказал тот, кто знал сумму. Что за числа загадал маленький мальчик? Ход решения обосновать.

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

Итак, не будем медлить и перейдем к делу:
1. Мы сразу имеем явное ограничение обоих чисел - они больше 1 и меньше 100, натуральные т.е. 2, 3, 4...99. (Таким образом мы имеем 9604 комбинации)
2. Числа различные, т.е. они не равны между собой. таким образом 98 вариантов из 9604 сразу можно исключить.
И из оставшихся комбинаций половина дублируются, так что рассматриваем только 4753 комбинации )))))))
3. Мальчику, который знал произведение чисел, данных не хватило. А это значит, что комбинации, в которых оба числа простые, мы тоже отметаем, иначе бы мальчик, знавший произведение, легко бы узнал числа. (простые числа: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97)
4. Мальчик, который знал сумму, знал, что данных второму не хватило. Знать он это мог только в том случае, если сумма, которую знал он, не может быть суммой 2-х простых чисел.

Дальше условия все запутаннее и запутаннее, так как каждое строится на предыдущем по ходу разговора мальчиков! страшно?

5. Мальчик, который знал произведение чисел, по реплике собеседника понял, какие числа были загаданы.значит у него было несколько вариантов, на которые можно было разложить произведение этих чисел. Но только один из них давал такую сумму, которая не могла быть суммой двух простых чисел.
6. Второй мальчик тоже понял, что это были за числа. Он знал сумму этих чисел, и рассмотрел все пары чисел, на которые эта сумма раскладывается. И только одна такая пара давала произведение чисел, которое при разложении давало бы только одну пару чисел, сумма которых не могла быть суммой двух простых чисел!

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




Как вы можете видеть, данный пример действительно вышел несколько объемным. При этом были использованы и условные блоки, и циклы, и массивы, и операторы goto...

Как вы видите, я не шел напрямую, разбирая все произведения на все возможные составляющие пары чисел, да и суммы я многие обошел (разбор на составляющие). Вместо этого я предварительно перебирал все возможные варианты и результаты (суммы или произведения) записывал в отдельные массивы, которые уже при необходимости просто перебирал и сравнивал с интересующими меня значениями. Я думаю, так рациональнее.
Также в отображенном результате сразу видно, что половину вариантов (дублирующую половину) и диагональ, на которой числа равны, я сразу отсек, перебирая второе число не от 2 до 98, а от (i+1).

Результаты, выбранные макросом, как правильные, видны на скриншоте. Их 2, но подходит из них только 1 (13 и 4). Второй результат не подходит потому, что мальчик, знавший произведение этих чисел, мог сразу определить эти числа, хоть одно из них (4) и не является простым. А все потому, что возможны лишь 2 варианта: 2 и 4 или 4 и 2. Таким образом, мы видим, что произведения, которые являются кубом простого числа (это 4 числа, подходящих в условия задачи: 8, 27, 125, 343) следовало сразу исключить. Но раз уж после работы макроса мы легко нашли правильный ответ, мучать далее макрос не считаю целесообразным - свою функцию он выполнил.


Комментариев нет:

Отправить комментарий