Código fuente de embellecimiento de verano
Este es un problema de OJ~ ~
En primer lugar, lo que queremos decir es que el problema de OJ básicamente no es un problema de programación, sino un problema de matemáticas. o un problema de programación de código corto~ p>
Este problema es en realidad un problema matemático. Se puede encontrar que cuando el número de ovejas a aumenta desde el punto de control número 1 a 30, es regular y la relación es la siguiente:
a(n) = (a(n-1) - 1) * 2.
La fórmula general es:
a(n)= 2^(n-1)* a(1)-2^(n-1)+2.
Donde a(1) = 3, entonces a (n) = 2 n+2.
Por lo tanto, no es necesario utilizar bucles en el cálculo. Por ejemplo, si ingresa 2, el número de ovejas es 2^2+2 = 6.
Sin embargo, para calcular 2 n, no necesitas usar una función de potencia, solo usa bits para calcular
Así que el programa es fácil de implementar~
# include & ltstdio. h & gt
int main()
{
龙n;
scanf(" %ld ", & ampn);
Si (n & gt0 & amp& ampn & lt= 30)
{
n =(1 & lt; & ltn)+2;
p>
printf("%ld ", n
}
Devuelve 0;
}
Tenga en cuenta que representa El valor n del número de ovejas debe ser al menos mayor que 2^32, por lo que el tipo debe ser largo y el límite superior del rango de valores de El largo es 2^31-1.
Pero este no es el algoritmo que más recursos y tiempo ahorra. Convirtamos este programa. Primero, aquí solicitamos una variable n para entrada y salida. Este es un recurso y lo eliminamos.
Los dos parámetros ocultos de la función principal simplemente se usan. La declaración de juicio if puede ser reemplazada por el operador ternario, que es más eficiente en algunos compiladores, al menos lo mismo.
Además, con respecto a la inclusión, puedes eliminarla directamente sin escribirla. Aquí solo usamos scanf y printf. La mayoría de los compiladores reconocen directamente sus propias entradas y salidas estándar. Para optimizar el código, todavía se reconocen incluso sin stdio.
Entonces el programa queda así~
int main(int argc, char** argv)
{
scanf( " %d ",&argc);
((30-argc)>= 0)?printf("%ld ",(long)(1<<argc)+2) :0;
}
Está bien, puede que esta no sea la forma más fácil, pero debería ser suficiente~
PD, la forma más rápida de ejecutar es negro. Si no considera la longitud del código fuente, puede hacer esto, porque el rango de valores de A se ha limitado de 1 a 30, y luego calcular manualmente todos los resultados de A de 1 a 30 y luego inicializar un 29. -elemento matriz de respuesta y use el interruptor para juzgar El valor de A genera directamente la respuesta.
PS2, lo que es más rápido es que no importa lo que ingrese, usted genera la respuesta que adivinó y luego sigue intentándolo, su personalidad explota, al igual que la prueba aprobada, esta solución es solo la solución del valor que ingresó. En este momento el programa se ejecuta sorprendentemente rápido. Este es el negro más repugnante. Muchos de los problemas de POJ sólo tienen una solución. Básicamente, todos lo calculan manualmente primero y generan la respuesta directamente. . .
PS3, si el cartel sabe montarlo, podrás hacerlo directamente. c, y genera directamente el valor de 1 memoria de desplazamiento a la izquierda y el valor de entrada + 2. Aunque no sé por qué está diseñado de esta manera, algunos códigos ensambladores se pueden incrustar en archivos C y se pueden compilar.
PS4, no puedes hacer DO de la forma convencional~
Pregúntame~