Académique Documents
Professionnel Documents
Culture Documents
Problema B: Caracolito
Quin no recuerda cuando alguno de nuestros padres se aprovechaba de nuestra
ingenuidad y nos planteaba el siguiente problema Un caracolito se encuentra en
el fondo de un pozo de 5 metros. El caracolito quiere salir del pozo y sube 3
metros en el da, pero cuando cae la noche se duerme y se resbala bajando 2 de
los tres que haba subido, Cuntos das tarda el caracol en salir?, muy
inocentemente contestabas: en 5 das. Ellos se rean un rato y te decan: Ests
mal, es en tres. Para nuestra mala fortuna ellos tenan toda la razn,
efectivamente era en tres das, ya que es ilgico que en el tercer da cuando el
caracolito alcanzaba llegar al borde del pozo, se quedara dormido esperando a
que se resbalase de nuevo.
Tu problema consiste en dados p, d, n, enteros positivos menores que 10^9,
determinar el nmero mnimo de das que tarda en salir el caracolito desde el
fondo de un pozo de p metros de profundidad, si el caracolito escala durante el da
d metros, mientras que la noche resbala n metros mientras duerme.
ENTRADA
La entrada consiste primero de un nmero nc que indica el nmero de casos a
procesar. Le siguen nc casos, cada uno de ellos en una lnea diferente con tres
nmeros enteros positivos p, d y n.
SALIDA
Por cada caso debes imprimir una lnea con el nmero mnimo de das que tarda
el caracolito en salir del pozo. En caso de que no pueda salir del pozo imprime
Imposible sin las comillas.
PHRISIS
void main()
{
int nc;
int p,d,n;
scanf("%d",&nc);
while(nc!=0)
{
n-- ;
}
}
Ahora tenemos que almacenar la variables p, d y n para lo cual llamamos la
funcin Scanf() que se desarrollar, que cumple los requisitos del problema
(que guarde el formato de una lnea al momento de ingresar las variables p, d
y n y adems deja el cursor en la misma lnea)
void main()
{
int nc;
int p,d,n;
cscanf("%d",&nc);
while(nc!=0)
{
p=Scanf();
d=Scanf();
n=Scanf();
nc--;
}
}
Seguido de esto ponemos la condicin es posible o no es posible que el
caracolito pueda salir del pozo.
El caracolito no podr salir si:
- d igual a n y p mayor que d o n. solo entonces no ser posible que haya
una solucin al problema.
En caso que si haya una solucin llamaremos a la funcin Solution(p,d,n),
que recibe tres parmetros (profundidad del pozo, distancia que sube en un
da y la distancia que resbala durante noche) en nmeros enteros (metros),
esta funcin retorna el nmero de das que demora en salir del pozo el
caracolito.
PHRISIS
v o id m a i n ( )
{
int nc;
int p,d,n;
c s c a n f ( " % d " , &n c ) ;
while(nc!=0)
{
p=Scanf();
d=Scanf();
n=Scanf();
( d < = n & &p > d ) ? c p r i n tf ( " \ t I m p o s i b l e \n " ) :c p r in t f ( " \ t % d \ n " , S o lu t io n ( p , d , n ) ) ;
nc--;
}
}
PHRISIS
CDIGO COMPLETO
/*
*
*/
caracolito.c
# in c lu d e < c o n i o . h >
b y: P H R I S I S
/ / p ar a l a s f u n c i o n e s cs c a n f , c p r i n tf , c l r s c r y g e t c h .
i n t S o lu t i o n ( i n t p , in t d , in t n ) { r e tu r n ( p - d < = 0 ) ? 1 : 1 + S o l u t i o n ( p - ( d - n ) , d , n ) ; }
int Scanf()
{
int c,n=0;
while(1)
{
c = getch();
i f ( c = = 1 3 | | c = = 3 2 ) { c p r i n t f ( " \ t" ) ; b r e ak ; }
cprintf("%c", c);
n = 1 0 * n + ( i n t( c ) - 4 8 ) ;
}
r e tu r n n ;
}
v o id m a i n ( )
{
c l r s cr ( ) ;
int nc;
int p,d,n;
c s c a n f ( " % d " , &n c ) ;
while(nc!=0)
{
p=Scanf();
d=Scanf();
n=Scanf();
( d < = n & &p > d ) ? c p r i n tf ( " \ t I m p o s i b l e \n " ) :c p r in t f ( " \ t % d \ n " , S o lu t io n ( p , d , n ) ) ;
nc--;
}
getch();
}
Pr o b a d l o y ma n d a d m e s u s c o me n t a r io s