1. Introducción
El autor encontró tal pregunta en la competencia de algoritmo en la universidad. Ahora lo compartiré con ustedes: hay ocho monedas de plata Abcdefgh, y se sabe que una de ellas es una moneda falsificada, que es diferente de la moneda real, pero no sé si es más ligero o más pesado. Cómo usar el saldo para decidir qué moneda es una moneda falsificada con el número mínimo de comparaciones, y también sé que la moneda falsificada es más liviana o más pesada que la moneda real.
2. Análisis
Si esta pregunta es solo para resolver qué moneda falsificada es muy simple, el problema no es muy complicado, y solo necesita regresar y recurrir para obtener el resultado. ¡Necesitamos usar los menores pasos para lidiar con las dificultades del problema! ! !
En comparación con los problemas anteriores de la estructura de datos, hay recursión y retroceso. Hoy es posible que tengamos que entrar en contacto con un nuevo concepto llamado árbol. Como su nombre indica, la estructura de números significa que nuestro diagrama de análisis es como un árbol, con diversas información, como nodos de ramas. La estructura del árbol es un capítulo más grande en la estructura de datos, no en nuestra discusión. En esta pregunta, presentaremos una pequeña molécula del árbol, el árbol de decisión.
Primero construamos un modelo matemático para resolver ocho monedas de plata. Una situación simple es como esta. Nombramos las monedas de plata abcdefg, etc. A su vez, comparamos A+B+C y D+E+F. Si es igual, la moneda falsificada debe ser G o H. Primero comparamos cuál es más pesado, G o H. Si G es más pesado, compare con A (A es la moneda real). Si G es igual a A, G es la moneda real, entonces H es la moneda falsa. Dado que H es más ligero que G y G es la moneda real, el peso de la moneda falsificada es más ligera que la moneda real.
¿Qué pasa si no es igual? ¿Cuál es el caso? ¡Compararemos las ramas a su vez hasta que obtengamos la respuesta final!
3. Diagrama de muestra
Según el análisis anterior, podemos tener un diagrama completo de árbol de decisión:
4. Código
monedas de clase pública {private int [] monedas; monedas públicas () {monedas = new int [8]; para (int i = 0; i <8; i ++) monedas [i] = 10; } public void setfake (int weight) {Coins [(int) (math.random () * 7)] = peso; } public void false () {if (monedas [0]+monedas [1]+monedas [2] == monedas [3]+monedas [4]+monedas [5]) {if (monedas [6]> monedas [7]) comparar (6, 7, 0); más comparar (7, 6, 0); } else if (monedas [0]+monedas [1]+monedas [2]> monedas [3]+monedas [4]+monedas [5]) {if (monedas [0]+monedas [3] == Monedas [1]+monedas [4]) Compare (2, 5, 0); else if (monedas [0]+monedas [3]> monedas [1]+monedas [4]) comparar (0, 4, 1); if (monedas [0]+monedas [3] <monedas [1]+monedas [4]) comparar (1, 3, 0); } else if (monedas [0]+monedas [1]+monedas [2] <monedas [3]+monedas [4]+monedas [5]) {if (monedas [0]+monedas [3] == monedas [1]+monedas [4]) Compare (5, 2, 0); más si (monedas [0]+monedas [3]> monedas [1]+monedas [4]) comparar (3, 1, 0); if (monedas [0]+monedas [3] <monedas [1]+monedas [4]) comparar (4, 0, 1); }} protegido void compare (int i, int j, int k) {if (monedas [i]> monedas [k]) system.out.print ("/nfake monedas" + (i + 1) + "más pesado"); else System.out.print ("/n Fake Moneda" + (j + 1) + "encendedor"); } public static void main (string [] args) {if (args.length == 0) {system.out.println ("Entrada de peso de moneda falsa (mayor o menor que 10)"); System.out.println ("Ex. Java Coins 5"); devolver; } Coins ochoCoins = new Coins (); ochoCoins.setFake (Integer.ParseInt (args [0])); ochoCoins.fake (); }}resultado:
Ingrese el peso de la moneda falsificada (mayor o menor que 10)
ex. Java Monedas 5
Aquí hay un método general de resolución de problemas. Puede considerar cuidadosamente el código. Para este código, el análisis anterior es suficiente. Todos necesitan pensar en ello y aprender el resto por sí mismos, para que puedan entenderlo profundamente.
Resumir
Lo anterior es todo el contenido de este artículo sobre cómo resolver los ocho códigos de monedas de plata para la implementación de la programación Java. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!