Java - Combinaciones de billetes

 
Vista:
Imágen de perfil de Violeta
Val: 34
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Combinaciones de billetes

Publicado por Violeta (16 intervenciones) el 16/08/2019 11:33:45
Buenas.
Necesito ayuda para un ejercicio, soy estudiante de 2º de DAW pero aún me las veo con JAVA.
Tengo que hacer un ejercicio en el que tengo que sacar de forma automática todas las combinaciones posibles de billetes de 100, 50, y 20 que sumen 200.
He pensado que lo mejor sería hacerlo recorriendo un array.
La cosa es que no tengo problemas en recorrerlos (eso es básico), pero no se como hacerlo para que sume todo 200 (quizás con un while), o por ejemplo coja dos billetes de 50, o 4 de 20.

Cualquier idea aportada será agradecida!!!
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 Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Combinaciones de billetes

Publicado por Rodrigo (623 intervenciones) el 16/08/2019 17:32:04
Que tal 3 ciclos anidados, 1 por cada billete, desde 0 hasta 200/billete. Al interior del ciclo de mas adentro multiplicas cada indice por cada valor y sumas. SI da 200, ya tienes una respuesta mas.
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 Sebastian
Val: 282
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

Combinaciones de billetes

Publicado por Sebastian (91 intervenciones) el 18/08/2019 05:22:01
Hola
Primero tenemos que sacar la cantidad de billetes del mismo valor que den 200
Billete de 100
100+100 = 200 (2 billetes)
50+50+50+50 = 200 (4 billetes)
20+20+20+20+20+20+20+20+20+20 = 200 (10 billetes)
En total 16 billetes, con esos datos debemos armar una tabla con todas las posibles combinaciones de esos 16 billetes,
para que no se quede por fuera ninguna posibilidad.

Lo podemos hacer tomando el mismo esquema de una tabla de verdad como la siguiente sin tener en cuenta la ultima fila

deducir-tabla

Los títulos se cambiarían por los números de los billetes
100 100 50 50 50 50 20 20 20 20 20 20 20 20 20 20

Y luego la llenamos toda la tabla

Aquí un ejemplo de como se llena las columnas sencillas que es lo que necesitamos
https://es.wikibooks.org/wiki/Ejemplo_Uno_Tabla_de_Verdad

Una vez llenada la matriz, la recorremos sumando las columnas de la fila y compramos si esa suma es = 200, si es
la mostramos, debido a que tomamos varios números repetidos, las respuestas pueden repetirse, hay que validar eso.

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import java.lang.*;
class Main {
 
  public static void main(String[] args) {
    int nums[]={100,100,50,50,50,50,20,20,20,20,20,20,20,20,20,20};
    int matrix[][] = fillMatrix(nums);
    String resultBefore = " ";
    String conbination = "";
    int sum = 0;
    for (int i = 0; i<matrix.length; i++){
      for(int j=0; j<matrix[i].length; j++){
        if(matrix[i][j]!=0){
          conbination += " "+matrix[i][j];
          sum += matrix[i][j];
        }
      }
      if(sum == 200){
        String lines[] = resultBefore.split(",");
        boolean isExist = false;
        for (String line : lines){
          if (line.equals(conbination)){
            isExist = true;
          }
        }
        if(!isExist){
          System.out.println(conbination);
          resultBefore += ","+conbination;
        }
      }
      conbination = "";
      sum = 0;
    }
  }
 
  public static int [][] fillMatrix(int numbers[]){
    int matrix[][]= new int [(int) Math.pow(2,numbers.length)][numbers.length];
    int positionNumber = 0;
    int lengthNumber = ((int) Math.pow(2,numbers.length))/2;
    int auxNum = 0;
    for(int i = 0; i < matrix[0].length; i++){
      auxNum = numbers[positionNumber];
      for(int j = 0, num = 1; j < matrix.length; j++, num++){
        if (num <= lengthNumber){
          matrix[j][i] = auxNum;
        }else{
          auxNum = numbers[positionNumber] == auxNum ? 0:numbers[positionNumber];
          matrix[j][i] = auxNum;
          num = 1;
        }
      }
      lengthNumber /= 2;
      positionNumber++;
    }
    return matrix;
  }
}

Este es el código que hice para resolver tu problema espero te ayude
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 Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Combinaciones de billetes

Publicado por Rodrigo (623 intervenciones) el 18/08/2019 19:08:15
Buena la solucion, felicitaciones!.

En el fondo, considerar todas las posibilidades, guardarlas y luego evaluarlas es un camino de 3 pasos que puede hacerse en solo 1,
dicho de otra forma, se pueden generar todas las posibilidades y en ese momento evaluar si esa combinacion sirve,
que es lo que sugeri previamente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Billetes {
 
  public static void main(String[] args) {
    for( int i = 0; i <= 200/100; i++) {
        for( int j = 0; j <= 200/50; j++ ) {
            for( int k = 0; k <= 200/20; k++) {
                int total = i*100 + j*50 + k*20;
                if(total == 200) {
                    muestra(i,100);
                    muestra(j,50);
                    muestra(k,20);
                    System.out.println("\n");
                }
            }
        }
    }
  }
 
  static private void muestra(int cuantos, int denominacion) {
      for( int i = 0; i < cuantos; i++) {
          System.out.print(denominacion + " ");
      }
  }
}
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
sin imagen de perfil
Val: 33
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Combinaciones de billetes

Publicado por frank (15 intervenciones) el 22/08/2019 06:25:43
Me parece más sencillo este código que el de Sebastian, pero agradezco la aproximación que ha tenido con lo de las tablas de verdad, si no me hubiera dejado lelo con el conbination (que dolor T.T) le hubiera dado upvote a él también xD
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 Violeta
Val: 34
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Combinaciones de billetes

Publicado por Violeta (16 intervenciones) el 20/08/2019 17:11:02
Muchas gracias chicos, las dos opciones son igual de válidas.

Trabajaré ambas, así aprendo a hacerlo de las dos formas (con arrays/sin arrays).

Un saludo.
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