SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: chenteklim8 en Domingo 12 de Junio de 2011, 20:02

Título: [C] problema de desglose de monedas
Publicado por: chenteklim8 en Domingo 12 de Junio de 2011, 20:02
Hola, estoy intentando hacer un programa en C que funcione de esta forma:
1º pide al usuario que introduzca la cantidad que quiere pagar.
2º pide que introduzca el numero de monedas diferentes de que dispone(minimo una).
3º pide el valor de cada una de las anteriores monedas (una de ellas debe valer 1).
4º con los datos anteriores devuelve la cantidad a pagar desglosada en un numero minimo de monedas.

la parte que no consigo poner en código es aquella en la que tiene que buscar en la tabla de monedas.
se que tiene que coger la mas grande hasta que la cantidad que queda por pagar es menor, y entoces realiza lo mismo con la siguiente moneda(que será mas pequeña).

Estoy haciendo unas practicas de algorítmia, pero el profesor no tiene ninguna intención de ayudarme con esto.

Gracias y un saludo
Título: Re: [C] problema de desglose de monedas
Publicado por: chenteklim8 en Domingo 12 de Junio de 2011, 20:28
de  momento lo que tengo es esto, compila y ejecuta, pero hay algo en el bucle de "monedas()" que falla
 me pueden ayudar a resolverlo?
//Obtener un algoritmo para minimizar, dado un sistema monetario,
//el número de monedas necesarias para reunir una cantidad de
//forma que la solución sea satisfactoria en todos los casos.
//Se dispone de un número ilimitado de monedas de cada tipo.

Código: C
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. void monedas();
  4. int c, *m, nm;
  5.  
  6. main(){
  7.     int i;
  8.     printf("cual es la cantidad a pagar? ");
  9.     scanf ("%d", &c);
  10.     printf("de cuantas monedas se dispone? minimo 1 ");
  11.     scanf("%d",&nm);
  12.     m=(int*) malloc(nm*sizeof(int));
  13.     printf("introduce el valor de cada moneda de mayor a menor, debe haber una de valor 1n");
  14.     for(i=0;i<nm;i++){
  15.         printf("moneda %d: ",i+1);
  16.         scanf("%d",&*(m+i));
  17.     }
  18.     monedas();
  19. }
  20.  
  21. void monedas(){
  22.     int i,j,r,n;
  23.     r=c;
  24.         for(i=0;i<nm;i++){
  25.             n=0;
  26.             while(r-*(m+i)>=*(m+i)){
  27.                 r=r-*(m+i);
  28.                 n++;
  29.             }
  30.             printf("se utilizan %d monedas de %dn",n,*(m+i));
  31.         }
  32.    
  33. }
  34.