Los requisitos de la pregunta son:
Conjetura de callatz:
Para cualquier número natural N, si es un número uniforme, córtelo la mitad; Si es un número impar, corta (3n+1) la mitad. Si sigue cortando esto repetidamente, definitivamente obtendrá N = 1 en un paso determinado. Cuando verificamos la conjetura de Karaz, para evitar cálculos repetidos, podemos registrar cada número encontrado durante el proceso de recursión. Por ejemplo, al verificar n = 3, necesitamos calcular 3, 5, 8, 4, 2 y 1. Cuando verificamos n = 5, 8, 4 y 2, podemos determinar directamente la autenticidad de la conjetura de Karaz sin cálculos repetidos, porque estos 4 números se han encontrado cuando se han encontrado 3, y digamos 5, 8, 4 y 2 son los números "cubiertos" por 3. Llamamos un número determinado en un número n. sobrescrito por otros números en la secuencia.
Ahora que se debe verificar una serie de números, solo necesitamos verificar algunos números clave, por lo que no tenemos que verificar repetidamente los números restantes. Su tarea es averiguar estos números clave y producirlos en orden de grandes a pequeños.
Formato de entrada: cada entrada de prueba contiene 1 caso de prueba. La línea 1 proporciona un número entero positivo k (<100), la línea 2 proporciona k valores de K enteros positivos diferentes n (1 <n <= 100) para ser verificados, separados por espacios.
Formato de salida: la salida de cada caso de prueba toma una fila, y los números clave se emiten en orden de gran a pequeño. Los números están separados por 1 espacio, pero no hay espacios después del último número en una línea.
Ingrese una muestra:
6
3 5 6 7 8 11
Muestra de salida:
7 6
El código es el siguiente:
<span style = "font-size: 14px;"> import java.util.arrayDequ; import java.util.arrayList; importar java.util.dequ; import java.util.list; import java.util.queue; import java.util.scanner; import java.util.sortedset; import java.util.treeset; clase pública PAT1005 {public static void main (string [] args) {// tODO método auto generado escáner escáner = new Scanner (System.in); int numSize = Scanner.NextInt (); Arraydeque <integer> newArrayDeque = new ArrayDeque <Integer> (); Arraydeque <integer> cloearRaydeque = new ArrayDeque <Integer> (); int i; while (scanner.hasnext ()) {// lee el valor de entrada del teclado para (i = 0; i <numSize; i ++) {newArrayDequ.add (Scanner.NextInt ()); } if (i> = numSize) {break; }} int temp; para (Integer Integer: NewArrayDequ) {// Guardar números no críticos en ClosearRayDequate temp = Integer; while (temp! = 1) {if (temp%2 == 0) {temp = temp/2; if (newArrayDequ.Contains (temp))) {cercaearrayDequ.add (temp); }} else {temp = (temp*3+1)/2; if (newArrayDequ.Contains (temp))) {cercaearrayDequ.add (temp); }}}} SortedSet <Integer> sortedSet = new TreeSet <Integer> (); // SortedSet se usa para almacenar números clave para (Integer Integer: NewArrayDeque) {if (! ClosearRaydeque.contains (Integer)) {shatedset.add (integer); }} int [] leftInt = new int [sortedset.size ()]; int j = sortedset.size ()-1; for (Integer Integer: SortedSet) {LeftInt [j] = Integer; J--; } for (int j2 = 0; j2 <leftint.length; j2 ++) {// emite el número de clave en orden de gran a pequeño if (j2 == leftInt.length-1) {System.out.println (LeftInt [J2]); } else {System.out.print (LeftInt [J2]+""); }}}}} </span>Lo anterior se trata de este artículo, espero que sea útil para el aprendizaje de todos.