Les exigences de la question sont:
Conjecture Callatz:
Pour tout nombre naturel n, s'il s'agit d'un nombre pair, coupez-le la moitié; S'il s'agit d'un nombre impair, coupez (3n + 1) hors de moitié. Si vous continuez à le couper à plusieurs reprises, vous obtiendrez certainement n = 1 à une certaine étape. Lorsque nous vérifions la conjecture de Karaz, afin d'éviter les calculs répétés, nous pouvons enregistrer chaque nombre rencontré pendant le processus de récursivité. Par exemple, lors de la vérification n = 3, nous devons calculer 3, 5, 8, 4, 2 et 1. Lorsque nous vérifions n = 5, 8, 4 et 2, nous pouvons déterminer directement l'authenticité de la conjecture de Karaz sans calculs répétés, car ces 4 numéros ont été rencontrés lors de la vérification 3, et nous disons 5, 8, 4 et 2 sont des nombres "par 3. surévalué par d'autres nombres de la séquence.
Maintenant, étant donné une série de nombres à vérifier, nous devons seulement vérifier quelques numéros de clés, nous n'avons donc pas à vérifier à plusieurs reprises les nombres restants. Votre tâche consiste à découvrir ces nombres clés et à les sortir de l'ordre de grand à petit.
Format d'entrée: chaque entrée de test contient 1 cas de test. La ligne 1 donne un entier positif K (<100), la ligne 2 donne k valeurs de K différente différente N (1 <n <= 100) à vérifier, séparée par des espaces.
Format de sortie: la sortie de chaque cas de test prend une ligne et les numéros de clé sont sortis de l'ordre de grand à petit. Les nombres sont séparés par 1 espace, mais il n'y a pas d'espaces après le dernier numéro dans une ligne.
Entrez un échantillon:
6
3 5 6 7 8 11
Échantillon de sortie:
7 6
Le code est le suivant:
<span style = "Font-Size: 14px;"> Importer java.util.ArrayDequ; import java.util.arraylist; Importer java.util.dequ; Importer java.util.list; Importer Java.util.Queue; import java.util.scanner; Importer Java.util.SortedSet; import java.util.treeset; classe publique PAT1005 {public static void main (String [] args) {// TODO Méthode générée automatiquement Stub Scanner Scanner = new Scanner (System.in); int numSize = Scanner.Nextint (); ArrayDeque <Integer> newArrayDeque = new ArrayDeque <Integer> (); ArrayDeque <Integer> CloseArrayDeque = new ArrayDeque <Integer> (); int i; while (scanner.hasnext ()) {// Lisez la valeur d'entrée du clavier pour (i = 0; i <numsize; i ++) {newArrayDequ.add (Scanner.Nextint ()); } if (i> = numsize) {break; }} int temp; pour (entier entier: newArrayDequ) {// Enregistrer les nombres non critiques dans Temp = entier de plus en plus 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); }}}} TriEdSet <Integer> triEdSet = new TreeSet <Integer> (); // triEdSet est utilisé pour stocker les numéros de clés pour (entier entier: newArrayDeque) {if (! closerArrayDeque.Contains (Integer)) {sriedSet.Add (entier); }} int [] LeftInt = new int [tridSet.size ()]; int j = tridSet.size () - 1; for (Integer Integer: triEdSet) {LeftInt [j] = entier; J-; } pour (int J2 = 0; J2 <LeftInt.length; J2 ++) {// Sortie le numéro de clé dans l'ordre du grand à petit if (j2 == LefTInt.length-1) {System.out.println (LeftInt [J2]); } else {System.out.print (LeftInt [J2] + ""); }}}}} </span>Ce qui précède concerne cet article, j'espère qu'il sera utile à l'apprentissage de tout le monde.