sdnuoj 1193. Ecuación de palo de partido

Título:

Dados tus n fósforos, ¿cuántas ecuaciones puedes deletrear como "A + B = C"? La A, B y C de la ecuación son números enteros escritos con cerillas.
El número de cerillas es el siguiente
Inserte la descripción de la imagen aquí
:

  1. El signo más y el signo igual requieren dos cerillas
  2. Si A ≠ B, entonces A + B = C y B + A = C se consideran ecuaciones diferentes (A, B, C> = 0)
  3. Se deben usar todas las cerillas

Esta pregunta es una enumeración violenta.
Primero escribe el número de cerillas para cada número

int tr[10] = {
    
    6, 2, 5, 5, 4, 5, 6, 3, 7, 6};

Para cumplir con el significado de la pregunta, se deben cumplir dos condiciones:
1. Se establece la ecuación matemática A + B = C
2. Es decir, el número de cerillas de A + el número de cerillas de B + el número de cerillas de C = n-4 (4 se refiere al número de cerillas con el signo igual)

Luego escribí el juicio violento directamente. Originalmente, escribí tres ciclos, es decir, cada ciclo tiene un número de ABC. El resultado es demasiado largo. Después de esperar mucho tiempo, no hay resultado.
Luego descubrí que escribir dos se puede hacer porque i + j es igual al primero Hay tres números C, por lo que los dos juicios se reducen a uno, solo f (i + j) == n-4-f (i) -f (j) (inteligente ...)

Otro punto es que la cantidad de enumeraciones es algo, es decir, si escribes la cantidad de cerillas, encontrarás que 7 es tres, por lo que se puede usar, como 771 + 1 = 772, un total de 23, no más que eso. Este rango es casi igual a 800, y no puede aumentarlo indefinidamente para evitar problemas, en caso de que expire ...

#include<bits/stdc++.h>
using namespace std;

int tr[11] = {
    
    6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
int f(int x)
{
    
    
    int sum = 0;
    if(x < 10)
        return tr[x % 10];
    else
    {
    
    
        while(x)
        {
    
    
            sum += tr[x % 10];
            x = x / 10;
        }
        return sum;
    }
}

int main()
{
    
    

    int n;
    int ans = 0;
    cin>>n;
    n = n - 4;
    for(int i = 0; i <= 800; i++)
    {
    
    
        for(int j = 0; j <= 800; j++)
        {
    
    
            if(f(i + j) == n - f(i) - f(j))
                ans++;

        }
    }
    cout<<ans;



}

Supongo que te gusta

Origin blog.csdn.net/weixin_51216553/article/details/110307616
Recomendado
Clasificación