1. Введение
Автор столкнулся с таким вопросом в конкурсе алгоритмов в университете. Теперь я поделюсь им с вами: есть восемь серебряных монет AbcDefgh, и одна из них, как известно, является поддельной валютой, которая отличается от реальной валюты, но я не знаю, является ли она легче или тяжелее. Как использовать баланс, чтобы решить, какая монета является поддельной валютой с минимальным количеством сравнений, и я также знаю, что поддельная валюта легче или тяжелее реальной валюты.
2. Анализ
Если этот вопрос просто для того, чтобы решить, какая поддельная валюта очень проста, проблема не очень сложна, и вам нужно только вернуться и повторить, чтобы получить результат. Нам нужно использовать наименее шаги, чтобы справиться с трудностями проблемы! ! !
По сравнению с предыдущими проблемами структуры данных, существуют рекурсию и отступания. Сегодня нам, возможно, придется вступить в контакт с новой концепцией, называемой деревом. Как следует из названия, цифровая структура означает, что наша диаграмма анализа похожа на дерево, с различной информацией, такой как филиатные узлы. Структура дерева является более крупной главой в структуре данных, а не в нашем обсуждении. В этом вопросе мы представим небольшую молекулу дерева, дерево решений.
Давайте сначала построим математическую модель для решения восемь серебряных монет. Простая ситуация такая. Мы называем серебряные монеты abcdefg и т. Д., В свою очередь, сравниваем A+B+C и D+E+F. Если это равно, поддельная валюта должна быть g или h. Сначала мы сравниваем, какой из них тяжелее, g или h. Если G тяжелее, то сравните с (a - это реальная валюта). Если G равен A, G - реальная валюта, то H - поддельная валюта. Поскольку H является легче, чем G и G является реальной валютой, вес поддельной валюты легче, чем реальная валюта.
Что если это не равно? В чем дело? Мы будем сравнивать филиалы по очереди, пока не получим окончательный ответ!
3. Образец диаграмма
Основываясь на вышеуказанном анализе, мы можем иметь полную диаграмму дерева решений:
4. Код
монеты открытого класса {private int [] монеты; public Coins () {Coins = new Int [8]; для (int i = 0; i <8; i ++) монет [i] = 10; } public void setFake (int Weews) {COINS [(int) (math.random () * 7)] = Вес; } public void FAKE () {if (COINS [0]+CONINS [1]+CONINS [2] == COINS [3]+COINS [4]+CONINS [5]) {if (CONINS [6]> CONS [7]) Сравнение (6, 7, 0); иначе сравнить (7, 6, 0); } else if (монеты [0]+монеты [1]+монеты [2]> монеты [3]+монеты [4]+монеты [5]) {if (монеты [0]+монеты [3] == Монеты [1]+монеты [4]) сравнить (2, 5, 0); иначе if (монеты [0]+монеты [3]> монеты [1]+монеты [4]) сравнить (0, 4, 1); if (монеты [0]+монеты [3] <монеты [1]+монеты [4]) сравнить (1, 3, 0); } else if (монеты [0]+монеты [1]+монеты [2] <монеты [3]+монеты [4]+монеты [5]) {if (монеты [0]+монеты [3] == Монеты [1]+монеты [4]) сравнить (5, 2, 0); иначе if (монеты [0]+монеты [3]> монеты [1]+монеты [4]) сравнить (3, 1, 0); if (монеты [0]+монеты [3] <монеты [1]+монеты [4]) сравнить (4, 0, 1); }} защищенный void compare (int i, int j, int k) {if (coins [i]> coins [k]) System.out.print ("/nfake Coins" + (i + 1) + "тяжелее"); else System.out.print ("/n поддельная валюта" + (j + 1) + "LIGHER"); } public static void main (string [] args) {if (args.length == 0) {System.out.println ("Входная поддельная валюта (больше или меньше 10)"); System.out.println ("Ex. Java Coins 5"); возвращаться; } Монеты восемькоинс = new Coins (); Eightcoins.setfake (integer.parseint (args [0])); восемькоин.fake (); }}результат:
Введите весовую валюту (больше или меньше 10)
бывший. Java Coins 5
Вот общий метод решения проблем. Вы можете тщательно рассмотреть код. Для этого кода приведенного выше анализа достаточно. Каждый должен подумать об этом и узнать все остальное, чтобы они могли понять это глубоко.
Суммировать
Выше приведено все содержание этой статьи о решении восьми кодов серебряных монет для реализации программирования Java. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!