Cet article décrit la méthode de calcul du nombre de trous noirs en Java. Partagez-le pour votre référence, comme suit:
Tout numéro à 5 chiffres, tel que: 34256, perturber et réorganiser ses numéros de chiffre pour obtenir un nombre maximum: 65432 et un numéro minimum 23456. Trouvez la différence entre ces deux nombres et obtenez: 41976. Répétez le processus ci-dessus avec ce nombre (s'il y a moins de 5 chiffres, ajoutez 0 à la première place). Ce faisant, les chiffres tomberont dans un certain cycle (appelé trou noir numérique).
Par exemple, le nombre tombera dans ce cycle: [82962 75933, 63954, 61974].
Veuillez écrire un programme pour trouver tous les cercles de boucle possibles avec 5 chiffres et sortie, chaque cercle de boucle occupe 1 ligne. Si tous les nombres à 5 chiffres sont les mêmes, le cercle de boucle est [0], qui peut être ignoré. Le format de sortie du cercle de boucle est imité comme:
[82962,75933, 63954, 61974]
L'ordre des nombres peut être ignoré.
Test.java:
Classe publique Test {statique int r = 0; statique int b [] = new int [16]; static int c [] = new int [5]; static int tri (int n, booléan boo) // fonction de tri {int i, j, sum = 0, temp; int a [] = new int [5]; pour (i = 0; i <5; i ++) {a [i] = n% 10; n / = 10; } pour (j = 0; j <4; j ++) pour (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; }} pour (i = 0; i <5; i ++) sum + = a [i] * (int) math.pow (10,4-i); RETOUR SUM;} BOOLEAN STATIQUE BOO (int d []) // Fonction juge {int n, t, q, i, j; Flag booléen = true; pour (i = 0; i <16; i ++) pour (j = i + 1; j <16; j ++) if (b [i] == b [j]) // juger s'il y a une boucle, il vous suffit de juger si le même nombre apparaît deux fois {d [0] = i; D [1] = J; n = ji; pour (q = 0; q <= r; q ++) pour (t = i; t <= j; t ++) if (c [q] == b [t]) Flag = false; // utilisez un tableau unidimensionnel pour stocker le nombre à un chiffre du cercle de boucle (tout chiffre est OK, le premier chiffre est sélectionné ici) si (Flag) c [r ++] = b [i]; // bit dans le cas où (Flag) C [r ++] = B [i]; // Bit dans le cas où (Flag) C [r ++] = B [i]; // Bit dans le cas où (Flag) C [r ++] = B [I]; // De la valeur stockée dans le tableau unidimensionnel d'origine, puis prenez l'un du cercle de boucle pour enregistrer le drapeau de retour; } Retour Flag;} public static void main (String [] args) {int n, m, w, t, p; int r = 1; booléen drapeau = false; int d [] = new int [2]; System.out.println ("Résultat de test Wulin.com:"); pour (m = 10000; m <100000; m ++) {n = m; pour (p = 0; p <16; p ++) {w = tri (n, true) -sort (n, false); b [p] = w; n = w; } if (boo (d)) // Sortie des différents cercles de boucle {System.out.printf ("["); pour (t = d [0]; t <d [1] -1; t ++) System.out.printf ("% d,", b [t]); System.out.printf ("% d", b [t]); System.out.printf ("] / n"); }}}}Résultats en cours:
Pour plus d'informations sur les algorithmes Java, les lecteurs qui sont intéressés par ce site peuvent consulter les sujets: "Résumé des compétences en fonctionnement mathématique Java", "Tutorials of Java Data Structure and Algorithm", "Résumé des compétences de nœud Java Dom", "Résumé du fichier Java et des compétences de fonctionnement du répertoire" et "Résumé des compétences de fonctionnement de Java Cache" "
J'espère que cet article sera utile à la programmation Java de tous.