Os requisitos da pergunta são:
Callatz Conjecture:
Para qualquer número natural n, se for um número par, corte -o metade; Se for um número ímpar, corte (3n+1) da metade. Se você continuar cortando isso repetidamente, definitivamente receberá n = 1 em uma determinada etapa. Quando verificamos a conjectura de Karaz, a fim de evitar cálculos repetidos, podemos registrar todos os números encontrados durante o processo de recursão. Por exemplo, ao verificar n = 3, precisamos calcular 3, 5, 8, 4, 2 e 1. Quando verificamos n = 5, 8, 4 e 2, podemos determinar diretamente a autenticidade do KARAZ conjectura sem cálculos repetidos, porque esses 4 números foram encontrados quando verificando 3 e chamamos de número 5, 8, 4 e 2 e 2, "Números", por certos números ", por certos números", por um número de nomes, em um número de nomes, em um número de nomes, em um número de nomes, em um número de nomes de um número. substituído por outros números na sequência.
Agora, dada uma série de números a serem verificados, precisamos apenas verificar alguns números importantes; portanto, não precisamos verificar repetidamente os números restantes. Sua tarefa é descobrir esses números -chave e gerá -los em ordem de grande a pequena.
Formato de entrada: Cada entrada de teste contém 1 caso de teste. A linha 1 fornece um número inteiro positivo K (<100), a linha 2 fornece valores k de k inteiro positivo diferente n (1 <n <= 100) a ser verificado, separado por espaços.
Formato de saída: a saída de cada caso de teste ocupa uma linha e os números de chave são emitidos em ordem de grande para pequena. Os números são separados por 1 espaço, mas não há espaços após o último número em uma linha.
Digite uma amostra:
6
3 5 6 7 8 11
Amostra de saída:
7 6
O código é o seguinte:
<span style = "font-size: 14px;"> importar java.util.arraydequ; importar java.util.arraylist; importar java.util.dequ; importar java.util.list; importar java.util.queue; importar java.util.scanner; importar java.util.sortedSet; importar java.util.treeset; classe pública PAT1005 {public static void main (string [] args) {// TODO Method Method Stub Scanner Stub Scanner = new Scanner (System.in); int numsize = scanner.NextInt (); Arraydeque <TEGER> newArrayDeque = new ArrayDeque <Teger> (); Arraydeque <TEGER> closearrayDeque = new ArrayDeque <TEGER> (); int i; while (scanner.hasNext ()) {// Leia o valor de entrada do teclado para (i = 0; i <numSize; i ++) {newArrayDequ.add (scanner.nextInt ()); } if (i> = numSize) {break; }} int temp; para (Inteiro Inteiro: NewArrayDequ) {// Salve números não críticos em temp closearrayDequate = Inteiro; while (temp! = 1) {if (temp%2 == 0) {temp = temp/2; if (newArrayDequ.Contains (temp))) {closearraydequ.add (temp); }} else {temp = (temp*3+1)/2; if (newArrayDequ.Contains (temp))) {closearraydequ.add (temp); }}}} Classificada <Teger> stornedSet = new TreeSet <Teger> (); // STORNEDSET é usado para armazenar números -chave para (Inteiro Inteiro: NewArrayDeque) {if (! closearraydeque.contains (Integer)) {stornedSet.add (número inteiro); }} int [] leftInt = new int [stornedSet.size ()]; int j = storedSet.size ()-1; para (Inteiro Inteiro: SortedSet) {leftInt [j] = Integer; J--; } para (int j2 = 0; j2 <leftInt.length; j2 ++) {// em saída o número da chave em ordem de grande para pequena se (j2 == leftint.length-1) {System.out.println (leftint [j2]); } else {System.out.print (leftInt [j2]+""); }}}}} </span>O exposto acima é tudo sobre este artigo, espero que seja útil para o aprendizado de todos.