Java implementa agujero negro digital

Dado cualquier número entero positivo de 4 dígitos cuyos dígitos no son exactamente iguales, si primero clasificamos los 4 números sin aumentar, luego ordenamos sin disminuir y luego restamos el segundo número por el primer número, obtendremos un nuevo Números Repitiendo esto todo el tiempo, pronto nos detendremos en 6174, conocido como el "agujero negro digital". Este número mágico también se llama la constante de Kaprekar.

Por ejemplo, a partir de 6767, obtendremos

7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
……

Ahora dado cualquier número entero positivo de 4 dígitos, escriba un programa para demostrar el proceso de llegar al agujero negro.

Formato de entrada:
Introduzca un dado (0,10
4
) número entero positivo en el rango N.

Formato de salida:
si los 4 dígitos de N son todos iguales, entonces la salida N-N = 0000 en una línea, de lo contrario, cada paso del cálculo se enviará en una línea hasta que 6174 aparezca como una diferencia. Vea el formato de salida de muestra. Tenga en cuenta que cada número se emite en un formato de 4 dígitos.

Muestra de entrada 1:
6767

Salida de muestra 1:
7766-6677 = 1089
9810-0189 = 9621
9621-1269 = 8352
8532-2358 = 6174

Ejemplo de entrada 2:
2222

Salida de muestra 2:
2222-2222 = 0000

Vi algunos métodos relativamente fáciles de entender en Internet. La parte más fácil de esta pregunta es que se ha corregido el número de dígitos, por lo que puede usar algunos métodos sin cerebro. El pequeño detalle es que debe haber datos de prueba que solo se ejecutan una vez para obtenerlos. 6174 Por lo tanto, el bucle elige do-while para lograrlo, también hay que usar el% 0d de printf para llenar el frente con 0

El siguiente es el código: `Insertar aquí import java.util.Arrays;
import java.util.Scanner;
public class Main {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    
    int n = input.nextInt();
    int result = numHighSort(n) - numLowSort(n);
    if(result == 0)
        System.out.printf("%04d - %04d = %04d\n",numHighSort(n),numLowSort(n),result);
    else
       {
        do
        {
            result = numHighSort(n) - numLowSort(n); //改变result
            System.out.printf("%04d - %04d = %04d\n",numHighSort(n),numLowSort(n),result);
            n = result;//改变n
        }while(n != 6174);       
       }
    
}
public static int numHighSort(int i)
{
    int[] number = new int[4];
    number[0] = i / 1000;
    number[1] = i % 1000 /100;
    number[2] = i % 100 / 10;
    number[3] = i % 10;
    Arrays.sort(number);//将数组元素升序排放
    
    return number[3]*1000 + number[2] * 100 + number[1]*10 + number[0]; 
}
public static int numLowSort(int i)
{
    int[] number = new int[4];
    number[0] = i / 1000;
    number[1] = i % 1000 /100;
    number[2] = i % 100 / 10;
    number[3] = i % 10;
    
    Arrays.sort(number);
    
    return number[0]*1000 + number[1] * 100 + number[2]*10 + number[3]; 
}

}
Espero ser de ayuda para todos

Publicado 3 artículos originales · elogiado 3 · visitas 27

Supongo que te gusta

Origin blog.csdn.net/weixin_45834063/article/details/105413496
Recomendado
Clasificación