Foro de elhacker.net

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:

Código
  1. /*
  2. Dados los numeros p,s,r deberas determinar el numero d de dias que tarda en salir
  3. el caracol del agujero.
  4.  
  5. La entrada consiste de tres numeros enteros p,s,r (con s>r), separados por espacios
  6.  que tendran un valor entre 1 y 1000000. La salida consiste de un numero entero d.
  7. */
  8.  
  9. #include <stdio.h>
  10.  
  11. int main(){
  12. int p=0,s=0,r=0,d=0,res=0,res2=0;
  13.  
  14. scanf("%d %d %d",&p,&s,&r);
  15.  
  16. if(r>s){
  17. printf("El caracol nunca lograra salir del agujero\n");
  18. }else{
  19. if(d<p){
  20. res=s+r;
  21. d=p-res;
  22. }
  23. printf("%d\n",d);
  24. }
  25.  
  26.    return 0;
  27. }
  28.  

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

Código
  1. while(d<p){
  2. res=p-s;
  3. res2=res+r;
  4. d++;
  5. }
  6.  

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?

Código:
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

Código:
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.