Artikel ini menjelaskan metode menghitung jumlah lubang hitam di Java. Bagikan untuk referensi Anda, sebagai berikut:
Setiap angka 5 digit, seperti: 34256, mengganggu dan mengatur ulang angka digitnya untuk mendapatkan angka maksimum: 65432 dan angka minimum 23456. Temukan perbedaan antara dua angka ini dan dapatkan: 41976. Ulangi proses di atas dengan nomor ini lagi (jika ada kurang dari 5 digit, tambahkan 0 di tempat pertama). Dengan melakukan ini, angka -angka akan jatuh ke dalam siklus tertentu (disebut lubang hitam digital).
Misalnya, angka baru saja akan jatuh ke dalam siklus ini: [82962.75933, 63954, 61974].
Silakan tulis program untuk menemukan semua lingkaran loop yang mungkin dengan 5 digit dan output, setiap lingkaran loop mengambil 1 baris. Jika semua angka 5 digit adalah sama, lingkaran loop adalah [0], yang dapat diabaikan. Format output lingkaran loop ditiru sebagai:
[82962.75933, 63954, 61974]
Urutan angka dapat diabaikan.
Test.java:
tes kelas publik {static int r = 0; static int b [] = int int [16]; static int c [] = int int [5]; static int sort (int n, boolean boo) // fungsi penyortiran {int i, j, sum = 0, temp; int a [] = int new [5]; untuk (i = 0; i <5; i ++) {a [i] = n%10; n/= 10; } untuk (j = 0; j <4; j ++) untuk (i = 0; i <4-j; i ++) {if (a [i] <a [i+1] && boo) {temp = a [i]; a [i] = a [i+1]; a [i+1] = temp; } if (a [i]> a [i+1] &&! boo) {temp = a [i]; a [i] = a [i+1]; a [i+1] = temp; }} untuk (i = 0; i <5; i ++) jumlah+= a [i]*(int) math.pow (10,4-i); return sum;} static boolean boo (int d []) // function juri {int n, t, q, i, j; bendera boolean = true; untuk (i = 0; i <16; i ++) untuk (j = i+1; j <16; j ++) if (b [i] == b [j]) // menilai apakah ada loop, Anda hanya perlu menilai apakah angka yang sama muncul dua kali {d [0] = i; d [1] = j; n = ji; untuk (q = 0; q <= r; q ++) untuk (t = i; t <= j; t ++) if (c [q] == b [t]) flag = false; // Gunakan array satu dimensi untuk menyimpan satu digit jumlah lingkaran loop (bit/bit/bit apa pun, bit/bit/bit/bit/bit/bit apa pun (bit/bit/bit ife ife; bit ife ife; bit/bit ife ife if ife if ife if ife ife if if if if if if if if if if if if if if if if if if if. Berbeda dari nilai yang disimpan dalam array satu dimensi asli, lalu ambil salah satu lingkaran loop untuk menyimpan bendera pengembalian; } return flag;} public static void main (string [] args) {int n, m, w, t, p; int r = 1; bendera boolean = false; int d [] = int new [2]; System.out.println ("Hasil tes wulin.com:"); untuk (m = 10000; m <100000; m ++) {n = m; untuk (p = 0; p <16; p ++) {w = sort (n, true) -sort (n, false); b [p] = w; n = w; } if (boo (d)) // output lingkaran loop yang berbeda {system.out.printf ("["); untuk (t = d [0]; t <d [1] -1; t ++) system.out.printf ("%d,", b [t]); System.out.printf ("%d", b [t]); System.out.printf ("]/n"); }}}}Hasil Menjalankan:
Untuk informasi lebih lanjut tentang algoritma Java, pembaca yang tertarik dengan situs ini dapat melihat topik: "Ringkasan Keterampilan Operasi Matematika Java", "Tutorial Struktur Data dan Algoritma Java", "Ringkasan Keterampilan Operasi Java Java", "Ringkasan file operasi Java File dan Direktori" dan Ringkasan JAVA dari JAVA "JAVA" JAVA "JAVA" Ringkasan Operasi Java "Ringkasan Operasi Java"
Saya harap artikel ini akan membantu pemrograman Java semua orang.