1019 Agujero negro digital (20 puntos) -Punto de prueba 5

1019 Agujero negro digital (20 puntos)

Dado cualquier entero positivo de 4 dígitos cuyos dígitos no son exactamente iguales, si primero ordenamos los 4 dígitos en orden no creciente, luego los ordenamos en orden no decreciente y luego restamos el segundo dígito del primer dígito, lo haremos Consiga un nuevo digital. Haciendo esto repetidamente, pronto nos detendremos en 6174, conocido como el "agujero negro digital", este número mágico también se llama constante de Kaprekar.

Por ejemplo, si partimos 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 a un agujero negro.

Formato de
entrada : la entrada da uno (0, 1 0 4) (0,10 ^ 4)( 0 ,1 04 )Un entero positivo N en el intervalo.

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

Ejemplo de entrada 1:

6767

Muestra de salida 1:

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

Ejemplo de entrada 2:

2222

Muestra de salida 2:

2222 - 2222 = 0000

respuesta

El significado de esta pregunta es calcular el número de cuatro dígitos de un lado a otro para separar cada número y luego combinar el valor máximo menos el valor mínimo y repetir hasta que los mismos dos números tengan una diferencia de 0 o una diferencia de 6174.
Después de ordenar para encontrar el número más grande, se puede invertir el valor más pequeño.
La función grande divide los cuatro dígitos y luego los clasifica en cubos. Comenzando con el número grande total,
se combina el nuevo número máximo de cuatro dígitos. La función pequeña toma el número inverso del valor de retorno de la función grande.
Nota: Si el punto de prueba 5 es anormal, significa que la entrada n = 6174 no se considera y la salida debe ser:

7641 - 1467 = 6174

En lugar de un valor nulo, debido a la diferencia.


Rutina de aire acondicionado

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<map>
#include<algorithm>
#include<set>
using namespace std;

int big(int n)
{
    
    
    int a=n/1000,b=n%1000/100,c=n%100/10,d=n%10;
    int m[10];memset(m,0,sizeof(m));
    int sum=0;
    m[a]++;m[b]++;m[c]++;m[d]++;
    for(int i=9;i>=0;)
    {
    
    
        if(m[i]>1){
    
    sum=sum*10+i;m[i]--;}
        else if(m[i]==1){
    
    sum=sum*10+i;i--;}
        else i--;
    }
    return sum;
}
int small(int n)
{
    
    
    return n/1000+n%1000/100*10+n%100/10*100+n%10*1000;
}
int main()
{
    
    
#ifdef ONLINE_JUDGE
#else
    freopen("in.txt","r",stdin);
#endif
int n,a,b;
cin>>n;
if(n==6174)
    {
    
    a=big(n);b=small(a);n=a-b;
    printf("%04d - %04d = %04d\n",a,b,n);}
while(n!=0&&n!=6174)
{
    
    
    a=big(n);b=small(a);n=a-b;
    printf("%04d - %04d = %04d\n",a,b,n);
}

return 0;
}

Supongo que te gusta

Origin blog.csdn.net/qq_41962612/article/details/114683870
Recomendado
Clasificación