[Off] ganado tiene dinero falso

Enlace: https: //www.nowcoder.com/questionTerminal/1d18c0841e64454cbc3afaea05e2f63c
Fuente: Red de Ganado-off

[Problemas de programación] han de dinero falso .
Índice de calor: 3294 límite de tiempo: C / C ++ de 1 segundo, 2 segundos de las restricciones de espacio en otros idiomas: C / C ++ 32M, 64M otros idiomas
algoritmo de conocimiento para explicar el video

título Descripción

Hay dinero en realidad falsificaciones! Ahora carne de cerdo, pero los agricultores no pagan subido, ah, cómo no hay dinero para comprar carne de cerdo ah. Esta comprar carne de cerdo nowcoder, el resultado del cambio tiene dinero falso! ! ! Desafortunadamente nowcoder consiguió accidentalmente en él un montón de dinero real en el interior. Sólo se sabe que el peso es más ligero que la calidad del dinero real de moneda falsa, le dará un equilibrio (balancear ambos extremos con capacidad para un número ilimitado de monedas), utiliza el mejor tiempo a que la moneda falsa de odio para averiguar.

Descripción Entrada:
≦ n ≦ 2 ^ 30, la entrada 0 de los extremos del programa.

Descripción Salida:
Hasta la falsificación de dinero, dijo varias veces que sin duda podemos encontrar?
Ejemplo 1
de entrada
. 3
12 es
0
Salida
1
. 3

Ideas de resolución de problemas

La media es la manera más rápida en tres porciones, dos de pesaje (comparar los tres peso), la proporción de la más pesada pesa de nuevo hasta las dos un peso menor que el número de extremos, para obtener Si no puede promedio falsificación de 3 puntos el resto es 1 o 2, ya que se dice que es hasta varias veces, n = n / 3 + 1
se encuentran cada uno de los puntos de toma máximos, dicho 3 partes, con un peso tanto como dos a tomar, entonces la proporción de hasta tres minutos para continuar hasta que las monedas restantes como de 0 o 1

// write your code here cpp
#include <stdlib.h>
#include <stdio.h> 
#include <string.h>

int main()
{ 
    long long n;
    int cnt; 
    while ((scanf("%lld",&n)) != EOF)
    { 
        if (n == 0)
            break;
        cnt=0; 
        while (n >= 2) 
        { 
            if (n % 3)
            { 
                //不可以整除则取最差情况:最重的一份是 n/3 + 1个金币
                n=n/3+1; 
            }
            else 
            { 
                //可以整除在直接整除,能够获取到最重的一份 
                n/=3; 
            }
            cnt++; 
        }
        printf("%d\n",cnt);
    }
    return 0;
}
Publicado 41 artículos originales · ganado elogios 121 · Vistas 8725

Supongo que te gusta

Origin blog.csdn.net/famur/article/details/105122126
Recomendado
Clasificación