Java - Monedas/Cambio

 
Vista:

Monedas/Cambio

Publicado por Eduardo (3 intervenciones) el 20/04/2018 23:50:59
Hace poco entre a un concurso de programación básica; aun tengo la duda de como poder hacerlo al 100% bien el ejercicio dice:

Se tienen monedas de 1 centavo, 5 centavos, 10 centavos; 20 centavos y 50 centavos. El usuario mediante el teclado dará el dígito (entero), y con base a ese dígito se darán todas las posibles respuestas de repartir ese cambio y cuantas maneras en total se puede repartir. El programa debe soportar que el usuario digite 7489.

Por ejemplo:

//---------------------------------------------------------------------

El usuario digita "11" nosotros daremos todas las posibles respuestas de dar esa cantidad con las monedas
que sería:

0 monedas de 50 centavos, 0 monedas de 20 centavos, 1 moneda de 10 centavos, 0 monedas de 5 centavos, 1 moneda de 1 centavo.

0 monedas de 50 centavos, 0 monedas de 20 centavos, 0 moneda de 10 centavos, 2 monedas de 5 centavos, 1 moneda de 1 centavo.

0 monedas de 50 centavos, 0 monedas de 20 centavos, 0 moneda de 10 centavos, 1 monedas de 5 centavos, 6 moneda de 1 centavo.

0 monedas de 50 centavos, 0 monedas de 20 centavos, 0 moneda de 10 centavos, 0 monedas de 5 centavos, 11 moneda de 1 centavo.

El numero total de posibles cambios es: 4 (posibles combinaciones).

//----------------------------------------------------------

GRACIAS POR LA AYUDA.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kingk
Val: 15
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Monedas/Cambio

Publicado por kingk (108 intervenciones) el 22/04/2018 00:27:16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int monedas[]={50,20,10,5,1};
int cantidad[]={0,0,0,0,0};
Scanner sc=new Scanner(System.in);
System.out.println("Ingresa un Numero:");
int num=sc.nextInt();
cantidad[0]=num;
for(int i=0;i<5;i++){
    cantidad[i]=num/monedas[i];
    while(cantidad[i]>0 && cantidad[i]!=num-1){
        int res=num-(monedas[i]*cantidad[i]);
        for(int j=0;j<5;j++){
            if(j>i){
                cantidad[j]=res/monedas[j];
                res-=monedas[j]*cantidad[j];
            }
            System.out.println(cantidad[j]+" monedas de "+monedas[j]);
        }
        System.out.println("----------------------");
        cantidad[i]--;
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Oliver
Val: 180
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Monedas/Cambio

Publicado por Oliver (67 intervenciones) el 22/04/2018 01:46:17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.Scanner;
public class Cambio{
    public static void main(String args[]){
        int monedas[]={50,20,10,5,1};
        int cantidad[]={0,0,0,0,0};
        Scanner sc=new Scanner(System.in);
        System.out.println("Ingresa un Numero:");
        int num=sc.nextInt();
        cantidad[0]=num;
        for(int i=0;i<5;i++){
            cantidad[i]=num/monedas[i];
            while(cantidad[i]>0 && cantidad[i]!=num-1){
                int res=num-(monedas[i]*cantidad[i]);
                for(int j=0;j<5;j++){
                    if(j>i){
                        cantidad[j]=res/monedas[j];
                        res-=monedas[j]*cantidad[j];
                    }
                    System.out.println(cantidad[j]+" monedas de "+monedas[j]);
                }
                System.out.println("----------------------");
                cantidad[i]--;
            }
 
        }
    }
}
o.o excelente !!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Monedas/Cambio

Publicado por Eduardo (3 intervenciones) el 22/04/2018 05:21:11
Muchas Gracias. Me pareció perfecto. Te lo agradezco amigo ^^
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Oliver
Val: 180
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Monedas/Cambio

Publicado por Oliver (67 intervenciones) el 22/04/2018 05:47:31
El credito es de " Kingk " yo solo lo puse mas bonito jajajaja, el algoritmo esta basado en particiones de matematicas discretas y estaba buscando en la API a ver si existiaa algo en la Clase Math pero se adelanto KingK , pero tiene su trabajito logico el algoritmo !!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Monedas/Cambio

Publicado por Carlos Alberto Varela (2 intervenciones) el 25/01/2020 15:00:22
El operador modulo (%) es el artífice o mago en este caso. Puedes generalizar con el modulo de 10 o comprobar cada valor.

Adjunto el link del programa el cambio optimo en monedas de 100, 200, 500, 1000

https://tutorias.co/sentencia-if-else-c-el-cambio-optimo/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 1.727
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Monedas/Cambio

Publicado por Rodrigo (468 intervenciones) el 25/01/2020 15:15:31
El metodo de dividir por el mayor primero y seguir con el siguiente mayor despues no funciona siempre, o no es generico.
Aunque parece que para este caso en particular si funciona.

En general depende del valor de las monedas que se den.

Para ejemplificar, un caso:

En un pais raro, las monedas son de $9, $6, $5 y $1. Cual es el minimo numero de monedas para obtener $11?

Si se usa el metodo de dividir por el mayor primero, la respuesta seria 1 moneda de $9 y 2 de $1, total 3 monedas.

Pero menos monedas se obtienen si se usan 1 moneda de $6 y una de $5. Total 2 monedas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar