если кучки имею одинаковый вес, значит фальшивая монета - третья.
Если вес ранзый, значит фальшивая одна из взвешиваемых монет. Значит та что лежит отдельно - настоящая. Сравним по весу одну из этих двух с третьей и узнаем какая из них фальшивая. (макс два взвешивания)
для четырех:
разобъем на три кучки 1, 1 и 2 монеты
взесим кучки по одной монете, если они разные, значит фальишвка среди них. Взвесим одну из монет с одной из оставшихся и сразу выясним какая фальшивка.
Если же кучки из 1 монеты одинаковые значит они обе настоящие. Возьмем одну из неиспользованных монет и взвесим с одной из настоящих. Сразу поймем какая из двух оставшихся фальшивая (макс 2 взвешивания)
для пяти
две кучки по две монеты и одна из одной.
взвесим две кучки между собой. если они одинаковые по весу, значит фальшивка - оставшаяся пятая.
если кучки разные по весу, то надо найти какая же из четырех монет фальшивая. задача сводится к предыдущей про 4 монеты (макс 3 взвешивания)
для шести монет
три кучки по две монеты. сравниваем две из них
если кучки имеют одинаковый вес, значит фальшивка в оставшейся кучке, а все взвешанные четыре монеты - подлинные.
взвешиваем одну из оставшихся монет с одной из подлинных и понимаем какая фальшивка из оставшихся.
Либо если первые две кучки имеют разный вес, то задача сводится к задаче с четырьмя монетами. Итого макимум 3 взвешивания.
Примечание, как правило задача формулируется не так и мы уже точно знаем, что фальшивка легче,
тогда алгоритмы:
3 монеты:
взвешиваем две, если какая то из них легче - фальшивка, если нет, значит оставшаяся фальшивка - 1 взвешивание
4 монеты
берем две монеты взвешиваем. если одна легче - она фальшивка, если одинаковый вес, то взвешиваем между собой две другие, та которая легче - фальшивка 2 взвешивания
5 монет.
две кучки по две монеты взвешиваем. Если одинаковый вес, то фальшивка - пятая монета, если одна из кучек легче - фальшивка в ней. взвешиваем две монеты легкой кучки между собой - легкая и есть фальшивка. 2 взвешивания
6 монет. две кучки по две монетки взвешиваем между собой. если вес одинаков - взвешиваем между собой две оставшиеся монеты - фальшивка найдена,
если вес разный, то в легкой кучке фальшивка. Взвесим между собой монетки из наиболее легкой кучке - найдена фальшивка. 2 взвешивания.
Общая идея:
так как у весов три положения, то монеты надо стараться бить на три множества.
Это задача совсем не "за ". Количество чисел k2, которые делятся на два, равно целой части от n/2. Аналогично, k3=n/3 и k5/n/5. Вычтем все эти количества из общего количества чисел, равного n: k=n-(k2+k3+k5) и это даст примерное количество чисел, которые не делятся на 2, 3 и 5. Примерно оно потому, что мы не учли числа, которые одновременно делятся на 2 и 3, на 2 и 5, на 3 и 5. Т.е. числа, которые делятся на 6, 10 и 15 мы вычли дважды. Поэтому надо найти количество этих чисел и отнять их. k6=n/6, k10=n/10, k15=n/15 - по-прежнему делим нацело. И теперь за исправленное значение k принимаем k+(k6+k10+k15). И последнее. Есть еще числа, которые делятся одновременно на 2, 3 и 5, т.е. на 2*3*5=30. Таких чисел k30=n/30. И мы их дважды прибавили. Теперь делаем последнюю коррекцию k, получая : k-k30.
Окончательно формула расчета: k=n-(k/2+k/3+k/5)+(k/6+k/10+k/15)-k/30 при условии целочисленного деления.
То что мы проделали выше, носит название операции включения-исключения множеств. Программа получается совсем простой.
Sub abc() Dim n As Long n = InputBox("Введите натуральное N") If n < 0 Then n = Abs(n) 'Защита от дурака MsgBox n - (n \ 2 + n \ 3 + n \ 5) + (n \ 6 + n \ 10 + n \ 15) - n \ 30 End Sub
тогда для трех монет: взвешиваем две наугад
если кучки имею одинаковый вес, значит фальшивая монета - третья.
Если вес ранзый, значит фальшивая одна из взвешиваемых монет. Значит та что лежит отдельно - настоящая. Сравним по весу одну из этих двух с третьей и узнаем какая из них фальшивая. (макс два взвешивания)
для четырех:
разобъем на три кучки 1, 1 и 2 монеты
взесим кучки по одной монете, если они разные, значит фальишвка среди них. Взвесим одну из монет с одной из оставшихся и сразу выясним какая фальшивка.
Если же кучки из 1 монеты одинаковые значит они обе настоящие. Возьмем одну из неиспользованных монет и взвесим с одной из настоящих. Сразу поймем какая из двух оставшихся фальшивая (макс 2 взвешивания)
для пяти
две кучки по две монеты и одна из одной.
взвесим две кучки между собой. если они одинаковые по весу, значит фальшивка - оставшаяся пятая.
если кучки разные по весу, то надо найти какая же из четырех монет фальшивая. задача сводится к предыдущей про 4 монеты (макс 3 взвешивания)
для шести монет
три кучки по две монеты. сравниваем две из них
если кучки имеют одинаковый вес, значит фальшивка в оставшейся кучке, а все взвешанные четыре монеты - подлинные.
взвешиваем одну из оставшихся монет с одной из подлинных и понимаем какая фальшивка из оставшихся.
Либо если первые две кучки имеют разный вес, то задача сводится к задаче с четырьмя монетами. Итого макимум 3 взвешивания.
Примечание, как правило задача формулируется не так и мы уже точно знаем, что фальшивка легче,
тогда алгоритмы:
3 монеты:
взвешиваем две, если какая то из них легче - фальшивка, если нет, значит оставшаяся фальшивка - 1 взвешивание
4 монеты
берем две монеты взвешиваем. если одна легче - она фальшивка, если одинаковый вес, то взвешиваем между собой две другие, та которая легче - фальшивка 2 взвешивания
5 монет.
две кучки по две монеты взвешиваем. Если одинаковый вес, то фальшивка - пятая монета, если одна из кучек легче - фальшивка в ней. взвешиваем две монеты легкой кучки между собой - легкая и есть фальшивка. 2 взвешивания
6 монет. две кучки по две монетки взвешиваем между собой. если вес одинаков - взвешиваем между собой две оставшиеся монеты - фальшивка найдена,
если вес разный, то в легкой кучке фальшивка. Взвесим между собой монетки из наиболее легкой кучке - найдена фальшивка. 2 взвешивания.
Общая идея:
так как у весов три положения, то монеты надо стараться бить на три множества.
Количество чисел k2, которые делятся на два, равно целой части от n/2. Аналогично, k3=n/3 и k5/n/5. Вычтем все эти количества из общего количества чисел, равного n: k=n-(k2+k3+k5) и это даст примерное количество чисел, которые не делятся на 2, 3 и 5. Примерно оно потому, что мы не учли числа, которые одновременно делятся на 2 и 3, на 2 и 5, на 3 и 5. Т.е. числа, которые делятся на 6, 10 и 15 мы вычли дважды. Поэтому надо найти количество этих чисел и отнять их. k6=n/6, k10=n/10, k15=n/15 - по-прежнему делим нацело. И теперь за исправленное значение k принимаем k+(k6+k10+k15).
И последнее. Есть еще числа, которые делятся одновременно на 2, 3 и 5, т.е. на 2*3*5=30. Таких чисел k30=n/30. И мы их дважды прибавили. Теперь делаем последнюю коррекцию k, получая : k-k30.
Окончательно формула расчета:
k=n-(k/2+k/3+k/5)+(k/6+k/10+k/15)-k/30 при условии целочисленного деления.
То что мы проделали выше, носит название операции включения-исключения множеств.
Программа получается совсем простой.
Sub abc()
Dim n As Long
n = InputBox("Введите натуральное N")
If n < 0 Then n = Abs(n) 'Защита от дурака
MsgBox n - (n \ 2 + n \ 3 + n \ 5) + (n \ 6 + n \ 10 + n \ 15) - n \ 30
End Sub