ProgIng - Programación en Ingeniería
Loading...
Searching...
No Matches
Ejemplo003.c File Reference

Máximo número de Pokémon que pueden evolucionarse con venta de no evolucionados. More...

#include <stdio.h>
Include dependency graph for Ejemplo003.c:

Go to the source code of this file.

Functions

int main (int argc, char *argv[])
 Punto de entrada. Calcula el máximo de evoluciones.

Detailed Description

Máximo número de Pokémon que pueden evolucionarse con venta de no evolucionados.

Se tienen N Pokémon y M barras de dulce. Evolucionar un Pokémon cuesta X dulces. Vender un Pokémon NO evolucionado produce Y dulces. No se puede vender un Pokémon evolucionado. Se pide el máximo número de evoluciones posibles.

Este código calcula una cota óptima usando la desigualdad: M + (N - P)·Y >= P·X que se transforma en: P <= (M + N·Y) / (X + Y) y finalmente P = min(N, floor((M + N·Y)/(X+Y))).

Entrada
El enunciado indica:
N M X Y
#define N
#define M
Warning
Este programa lee en el orden:
M N X Y
(intercambia N y M respecto al enunciado). Si vas a usar la entrada como está definida en el problema, ajusta el scanf o el orden de variables.
Salida
Un entero: máximo número de Pokémon que se pueden evolucionar.
Restricciones
1 ≤ N, M, X, Y ≤ 1e9.
Note
Con límites de 1e9, productos como N*Y pueden exceder 32 bits. Conviene usar tipos de 64 bits (long long) si se requiere robustez numérica.
Complejidad
Tiempo: O(1). Memoria: O(1).

Definition in file Ejemplo003.c.

Function Documentation

◆ main()

int main ( int argc,
char * argv[] )

Punto de entrada. Calcula el máximo de evoluciones.

Parameters
argcNo usado.
argvNo usado.
Returns
0 si finaliza correctamente.

Definition at line 52 of file Ejemplo003.c.

53{
54 (void)argc;
55 (void)argv;
56
57 /*
58 VARIABLES (según como ESTE código está leyendo la entrada):
59 M = cantidad de Pokémon capturados (enunciado lo llama N)
60 N = cantidad de barras de dulce (candies) (enunciado lo llama M)
61 X = costo en dulces para evolucionar 1 Pokémon
62 Y = dulces que se ganan al vender 1 Pokémon (NO evolucionado)
63 P = número máximo de Pokémon que se pueden evolucionar (respuesta)
64 */
65 int M, N, X, Y, P;
66
67 /* Lee: M N X Y (nota: el enunciado usualmente pide N M X Y). */
68 scanf("%d %d %d %d", &M, &N, &X, &Y);
69
70 /*
71 Si evolucionamos P Pokémon y vendemos los (M - P) restantes:
72 dulces disponibles = N + (M - P)*Y
73 Requisito para evolucionar P:
74 N + (M - P)*Y >= P*X
75 => N + M*Y >= P*(X + Y)
76 => P <= floor((N + M*Y)/(X + Y))
77
78 Además, P no puede ser mayor que M (no puedes evolucionar más Pokémon de los que tienes).
79 */
80 P = (N + Y * M) / (X + Y);
81
82 /* Imprime min(P, M). */
83 printf("%d\n", P > M ? M : P);
84 return 0;
85}