Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: EdgarKrieger en 30 Octubre 2018, 19:18 PM

Título: Ayuda con programa en C.
Publicado por: EdgarKrieger en 30 Octubre 2018, 19:18 PM
Hola comunidad, ahora les tengo un problema que para algunos les será bastante fácil, otros no se jejejeje como a mi, lo que sucede es que tengo que hacer un programa en C que dados tres números p,s,r se debe determinar el número d de días, es decir, si se tiene una profundidad d=10 y se sube al día s=5 y se resbala r=2, cuantos días se tarda en recorrer la profundidad establecida. El resultado es d=3 días, mi problema es que no me funciona para otros casos y solamente puedo resolver este problema por medio de si condicionales (if-else), el código que hice es este:


/*
Dados los numeros p,s,r deberas determinar el numero d de dias que tarda en salir
el caracol del agujero.

La entrada consiste de tres numeros enteros p,s,r (con s>r), separados por espacios
que tendran un valor entre 1 y 1000000. La salida consiste de un numero entero d.
*/

#include <stdio.h>

int main(){
int p=0,s=0,r=0,d=0,res=0,res2=0;

scanf("%d %d %d",&p,&s,&r);

if(r>s){
printf("El caracol nunca lograra salir del agujero\n");
}else{
if(d<p){
res=s+r;
d=p-res;
}
printf("%d\n",d);
}

    return 0;
}


lo intente con otras formulas y la función while, pero aún así no me funciona.


while(d<p){
res=p-s;
res2=res+r;
d++;
}


Alguien que me pueda ayudar, se lo agradecería mucho, es un ejercicio que tengo que realizar, pero nada más no me sale. Gracias por su ayuda.
Título: Re: Ayuda con programa en C.
Publicado por: AlbertoBSD en 30 Octubre 2018, 20:01 PM
Hola que tal, estos problemas tienen trampa, generalmente si los tratas de resolver de forma iterativa (Simulando con while la cantidad de dias transcurridos haciendo las operaciones de suma y resta del avance diario) tarda mucho, bueno si y no, con la velocidad actual de las computadoras no se siente, pero este tipo de problemas es para concursos donde miden el tiempo de uso del CPU y la cantidad de tiempo que tarda el programa en responder.

Por que la verdad es muy distinto, realizar un simple par de sumas, restas y una division a realizar un ciclo while con 1000000 repeticiones de sumas y restas.

La solución a este problema es de forma Matemática.

Ejemplo, si te dicen que Sube S cantidad de metros por dia, y de noche baja R cantidad.
En un ciclo completo cuantos metros T totales realmente sube?

T = S - R

Entonces tenemos que por dia avanza T metros. Entonces el minimo numero de D dias para completar una distancia P es de

D = P /T

D= P / (S-R)

Puede darnos un numero Decimal ? SI

Solo necesitamos la parte entera de ese numero, es decir redondeamos hacia el Entero mas Bajo

Por ejemplo un resultado de 9.9 se redondea a 9.

Saludos
Título: Re: Ayuda con programa en C.
Publicado por: EdgarKrieger en 31 Octubre 2018, 00:58 AM
Muchas gracias por tu ayuda AlbertoBSD, pues si estaba algo perdido jejeje, seguiré practicando mucho más.
Saludos.