AcWing 458 simplificado

Descripción del Título:

En las redes sociales, a menudo se ven encuestas de opinión y resultados sobre si cierto punto de vista está de acuerdo o no.

Por ejemplo, si hay 1498 personas que apoyan un determinado punto de vista y 902 personas están en contra, la proporción entre aprobación y oposición puede registrarse simplemente como 1498: 902.

Sin embargo, si los resultados de la encuesta se presentan de esta manera, la mayoría de las personas ciertamente no estarán satisfechas.

Debido a que el valor de esta relación es demasiado grande, es difícil ver su relación de un vistazo.

Para el ejemplo anterior, si la relación se registra como 5: 3, aunque existe un cierto error del resultado real, aún puede reflejar los resultados de la encuesta con mayor precisión y también es más intuitivo.

Ahora proporcione el número de seguidores A, el número de oponentes B y un límite superior LL. Por favor, reduzca A: B a A ′: B ′, requiriendo que tanto A ′ como B ′ no sean mayores que L y A ′ y B ′ Son relativamente primos (El máximo común divisor de dos enteros es 1) Bajo la premisa de que A ′ / B′≥A / B y el valor de A ′ / B′ − A / B es lo más pequeño posible.

Formato de entrada

Ingrese una línea que contenga tres números enteros A, B, L, separados por un espacio entre cada dos números enteros, indicando el número de partidarios, el número de oponentes y el límite superior.

Formato de salida

La salida es una línea que contiene dos números enteros A 'y B' separados por un espacio para indicar la razón simplificada.

rango de datos

1≤A, B≤10 ^ 6,
1≤L≤100, A / B≤L

Muestra de entrada:

1498 902 10

Salida de muestra:

5 3
#include <iostream>
#include <cstdio>

using namespace std;

int GCD(int x, int y)
{
    while(y ^= x ^= y ^= x %= y);
    return x;
}

int A, B, L;

int main()
{
    scanf("%d%d%d", &A, &B, &L);

    double minn = 200;
    int ansi, ansj;

    for(int i = 1; i <= L; i++)
    {
        for(int j = 1; j <= L; j++)
        {
            if(GCD(i, j) == 1)
            {
                double t = 1.0 * i / j;
                if(i * B >= j * A && t < minn)
                {
                    minn = t;
                    ansi = i;
                    ansj = j;
                }
            }
        }
    }

    printf("%d %d\n", ansi, ansj);

    return 0;
}

 

Supongo que te gusta

Origin blog.csdn.net/weixin_44620183/article/details/113842361
Recomendado
Clasificación