Persyaratan pertanyaannya adalah:
Dugaan Callatz:
Untuk angka alami n, jika itu adalah angka genap, potong setengahnya; Jika itu adalah angka ganjil, potong (3n+1) dari setengahnya. Jika Anda terus memotong ini berulang kali, Anda pasti akan mendapatkan N = 1 pada langkah tertentu. Ketika kami memverifikasi dugaan Karaz, untuk menghindari perhitungan yang berulang, kami dapat mencatat setiap angka yang dihadapi selama proses rekursi. Misalnya, ketika memverifikasi n = 3, kita perlu menghitung 3, 5, 8, 4, 2, dan 1. Ketika kita memverifikasi n = 5, 8, 4, dan 2, kita dapat secara langsung menentukan keaslian dugaan Karaz tanpa perhitungan yang diulang, karena nomor -angka ini tidak ada yang ditutupi oleh Nomor 3, dan kita mengatakan Nomor 3, dan NOMACE NOMACE NOMECE BEGERI NOME. ditimpa oleh angka lain dalam urutan.
Sekarang diberi serangkaian angka yang harus diverifikasi, kita hanya perlu memverifikasi beberapa nomor kunci, jadi kita tidak perlu berulang kali memverifikasi angka yang tersisa. Tugas Anda adalah mengetahui nomor -nomor kunci ini dan mengeluarkannya secara berurutan dari yang kecil.
Format Input: Setiap input uji berisi 1 test case. Baris 1 memberikan bilangan bulat positif K (<100), baris 2 memberikan nilai k dari k yang berbeda integer positif n (1 <n <= 100) untuk diverifikasi, dipisahkan oleh spasi.
Format Output: Output dari setiap test case memakan satu baris, dan nomor kunci adalah output dari besar ke kecil. Angka -angka dipisahkan oleh 1 ruang, tetapi tidak ada spasi setelah angka terakhir dalam satu baris.
Masukkan sampel:
6
3 5 6 7 8 11
Sampel output:
7 6
Kodenya adalah sebagai berikut:
<span style = "font-size: 14px;"> import java.util.arraydequ; impor java.util.arraylist; Impor java.util.deque; impor java.util.list; impor java.util.queue; impor java.util.scanner; impor java.util.sortedset; impor java.util.treeset; Public Class Pat1005 {public static void main (string [] args) {// TODO Metode yang dihasilkan secara otomatis Scanner Scanner Scanner = Pemindai baru (System.in); int numsize = scanner.nextInt (); ArrayDeque <Integer> newArrayDeque = ArrayDeque baru <Integer> (); ArrayDeque <Integer> closeArrayDeque = ArrayDeque baru <Integer> (); int i; while (scanner.hasnext ()) {// Baca nilai input keyboard untuk (i = 0; i <numsize; i ++) {newarraydequ.add (scanner.nextInt ()); } if (i> = numsize) {break; }} int temp; untuk (integer integer: newArraydeque) {// simpan nomor non-kritis ke closeArrayDequate temp = integer; 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 <Integer> sortedset = Treeset baru <Integer> (); // sortedset digunakan untuk menyimpan nomor kunci untuk (integer integer: newarraydeque) {if (! closeArraydeque.contains (integer)) {sortedset.add (integer); }} int [] LeftInt = int baru [sortedset.size ()]; int j = sortedset.size ()-1; untuk (integer integer: sortedset) {leftint [j] = integer; J--; } untuk (int j2 = 0; j2 <leftint.length; j2 ++) {// output nomor kunci dalam urutan dari besar ke kecil if (j2 == leftint.length-1) {system.out.println (LeftInt [j2]); } else {System.out.print (LeftInt [j2]+""); }}}}} </span>Di atas adalah semua tentang artikel ini, saya harap ini akan membantu untuk pembelajaran semua orang.