PAT-1023 Diviértete con los números

Observe que el número 123456789 es un número de 9 dígitos que consta exactamente de los números del 1 al 9, sin duplicación. Doblándolo obtendremos 246913578, que resulta ser otro número de 9 dígitos que consta exactamente de los números del 1 al 9, solo que en una permutación diferente. ¡Compruebe para ver el resultado si lo duplicamos de nuevo!

Ahora se supone que debe verificar si hay más números con esta propiedad. Es decir, si duplica un número dado con k dígitos, debe saber si el número resultante consiste solo en una permutación de los dígitos del número original.

Especificación de entrada:

Cada entrada contiene un caso de prueba. Cada caso contiene un número entero positivo con no más de 20 dígitos.

Especificación de salida:

Para cada caso de prueba, primero escriba en una línea “Sí” si al duplicar el número de entrada se obtiene un número que consiste solo en una permutación de los dígitos del número original, o “No” en caso contrario. Luego, en la siguiente línea, imprima el número duplicado.

Entrada de muestra:

1234567899

Salida de muestra:

Yes
2469135798

Ideas

El tipo long long solo puede almacenar 19 números, por lo que solo se puede almacenar en una matriz de caracteres. Use la matriz de tamaño para juzgar, si todos son 0, significa Sí, de lo contrario es No

Código

#include <iostream>
#include <string>
using namespace std;

int size[10];
int num[24]; // 存放乘以2后的数字
int main(){
    
    
    string a;
    cin >> a;
    int index = 0;
    for(int i=a.size()-1; i>=0; i--){
    
    
        int temp = a[i]-'0';
        size[temp]++;
        num[index] += (temp * 2) %10;
        num[index+1] = (temp*2) / 10;
        index++;
    }
    if (num[index] == 0) index--;
    int flag = 0;
    for (int i=index; i>=0; i--){
    
    
        size[num[i]]--;
        if (size[num[i]] <0){
    
    
            flag = 1;
            break;
        }
    }
    if (flag == 0){
    
    
        cout << "Yes" << endl;
    }else{
    
    
        cout << "No" << endl;
    }
    for (int i = index; i>=0; i--){
    
    
        cout << num[i];
    }
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_42100456/article/details/109553196
Recomendado
Clasificación