Требования к вопросу:
Гипотеза каллаца:
Для любого натурального числа n, если это четное число, отрежьте его половину; Если это нечетное число, отрежьте (3N+1) с половины. Если вы продолжаете резать это неоднократно, вы обязательно получите n = 1 на определенном шаге. Когда мы проверяем гипотезу Караза, чтобы избежать повторных расчетов, мы можем записать каждое число, которое встречается во время процесса рекурсии. Например, при проверке n = 3 нам необходимо вычислить 3, 5, 8, 4, 2 и 1. Когда мы проверяем n = 5, 8, 4 и 2, мы можем напрямую определить подлинность гипотезы караза без повторяющихся расчетов, потому что эти 4 числа сталкиваются, мы называем определенные номера, но не могут быть вызовы «не». перезаписано другими числами в последовательности.
Теперь, учитывая серию чисел, которые необходимо проверить, нам нужно только проверить несколько ключевых цифр, поэтому нам не нужно многократно проверять оставшиеся числа. Ваша задача - выяснить эти ключевые номера и вывести их в порядке от больших до малого.
Входной формат: каждый тестовый вход содержит 1 тестовый пример. Строка 1 дает положительное целое число k (<100), строка 2 дает значения k k различного положительного целого числа (1 <n <= 100), которые будут проверены, разделены пространствами.
Выходной формат: выход каждого тестового примера занимает одну строку, а номера ключей выводятся по порядку от больших до малого. Числа разделены 1 пространством, но после последнего числа в линии нет мест.
Введите образец:
6
3 5 6 7 8 11
Выходной образец:
7 6
Код заключается в следующем:
<span style = "font-size: 14px;"> import java.util.arraydequ; импортировать java.util.arraylist; Импорт java.util.deque; импортировать java.util.list; импортировать java.util.queue; импортировать java.util.scanner; импортировать java.util.sortedset; импортировать java.util.treeset; открытый класс PAT1005 {public static void main (string [] args) {// todo Автогенерированный метод сканера сканера = новый сканер (System.in); int numsize = scanner.nextint (); Arraydeque <Integer> newarraydeque = new Arraydeque <Integer> (); Arraydeque <Integer> zearraydeque = new Arraydeque <Integer> (); int i; while (scanner.hasnext ()) {// Читать входное значение клавиатуры для (i = 0; i <numsize; i ++) {newarraydequ.add (scanner.nextint ()); } if (i> = numsize) {break; }} int temp; для (целое число целого числа: newarraydequ) {// Сохранить некритические числа в stocearraydequate temp = integer; while (temp! = 1) {if (temp%2 == 0) {temp = temp/2; if (newarraydequ.contains (temp))) {rowearraydequ.add (temp); }} else {temp = (temp*3+1)/2; if (newarraydequ.contains (temp))) {rowearraydequ.add (temp); }}}} Sortedset <integer> sortedset = new Treeset <Integer> (); // SortedSet используется для хранения номеров ключей для (Integer Integer: newarraydeque) {if (! ZeckeArraydeque.contains (Integer)) {sortedset.add (Integer); }} int [] leftint = new int [sordSet.size ()]; int j = sortedset.size ()-1; для (целое число Integer: SortedSet) {LeftInt [j] = Integer; J--; } for (int j2 = 0; j2 <LeftInt.length; J2 ++) {// выводить номер ключа в порядке от большого до малого if (j2 == LealthInt.length-1) {System.out.println (LeftInt [j2]); } else {System.out.print (LeftInt [j2]+""); }}}}} </span>Выше приведено в этой статье, я надеюсь, что это будет полезно для каждого обучения.