Die Frage Anforderungen sind:
CALLATZ -Vermutung:
Wenn es sich um eine gleichmäßige Nummer n handelt, schneiden Sie sie die Hälfte ab. Wenn es sich um eine ungerade Zahl handelt, schneiden Sie (3n+1) die Hälfte ab. Wenn Sie dies immer wieder schneiden, erhalten Sie auf jeden Fall n = 1 in einem bestimmten Schritt. Wenn wir die Karaz -Vermutung überprüfen, können wir jede Zahl, die während des Rekursionsprozesses auftritt, um wiederholte Berechnungen zu vermeiden. Zum Beispiel müssen wir bei der Überprüfung von N = 3 3, 5, 8, 4, 2 und 1 berechnen. Wenn wir n = 5, 8, 4 und 2 verifizieren, können wir die Authentizität der Karaz -Vermutung direkt bestimmen, da diese 4 Zahlen bei der Verurteilung von 3 und Say 5, 8, 4, und 2, und 2. " überschrieben durch andere Zahlen in der Sequenz.
Bei einer Reihe von Zahlen müssen wir nun nur einige Schlüsselnummern überprüfen, sodass wir die verbleibenden Zahlen nicht wiederholt überprüfen müssen. Ihre Aufgabe ist es, diese Schlüsselzahlen herauszufinden und sie von groß bis klein auszugeben.
Eingabeformat: Jeder Testeingang enthält 1 Testfall. Zeile 1 ergibt eine positive Ganzzahl k (<100), Zeile 2 ergibt k -Werte von k unterschiedlichen positiven Ganzzahl N (1 <n <= 100) zu verifizieren und durch Leerzeichen getrennt zu werden.
Ausgangsformat: Die Ausgabe jedes Testfalles nimmt eine Zeile auf, und die Schlüsselzahlen werden in der Reihenfolge von groß nach klein ausgegeben. Die Zahlen sind durch 1 Speicherplatz getrennt, aber nach der letzten Zahl in einer Zeile gibt es keine Leerzeichen.
Geben Sie eine Probe ein:
6
3 5 6 7 8 11
Ausgangsprobe:
7 6
Der Code ist wie folgt:
<span style = "Schriftgröße: 14px;"> Import Java.util.ArrayDequ; Import Java.util.ArrayList; import Java.util.dequ; importieren java.util.list; import Java.util.queue; import Java.util.scanner; import Java.util.sortedSet; import Java.util.Treeset; public class pAT1005 {public static void main (String [] args) {// Todo automatisch generierter Methode Stub Scanner Scanner = neuer Scanner (System.in); int numsize = scanner.nextint (); Arraydeque <Ganzzahl> newArraydeque = new Arraydeque <Ganzzahl> (); Arraydeque <Ganzzahl> closearraydeque = new ArrayDeque <Ganzzahl> (); int i; while (scanner.hasNext ()) {// Lesen Sie den Tastatureingangswert für (i = 0; i <numsize; i ++) {newArrayDequ.add (scanner.NextInt ()); } if (i> = numsize) {break; }} int temp; für (Integer Integer: newArrayDequ) {// Nichtkritische Zahlen in ClosearrayDequate temp = Integer speichern; 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); }}}} SortEdSet <GanzEger> sortEdSet = new treeset <Integer> (); // sortEdSet wird verwendet, um Schlüsselnummern für (Ganzzahl integer: newarraydeque) {if (! closearraydeque.Contains (Integer)) {sortEdSet.add (Integer); }} int [] links = new int [sortEdSet.size ()]; int j = sortEdSet.size ()-1; für (Integer Integer: SortEdSet) {linkint [j] = Integer; J--; } für (int j2 = 0; j2 <links.Length; j2 ++) {// Ausgabe der Schlüsselnummer in der Reihenfolge von groß nach kleiner if (j2 == links.length-1) {System.out.println (links [j2]); } else {system.out.print (links [j2]+""); }}}}} </span>Das Obige dreht sich alles um diesen Artikel, ich hoffe, es wird für das Lernen aller hilfreich sein.