1
C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más / Ayuda para resolver un algoritmo en Java (combinaciones posibles)
« en: 17 de Septiembre 2013, 02:41 »
Hola a todos, estoy intentando resolver un algoritmo en Java, nunca había programado en Java y estoy algo atorada con este problema, dice:
Se tienen "s" cantidad de barras de "x" longitud a las cuales se harán "m" cantidad de cortes de "y" longitud, obtener el residuo de los cortes, además las posibles combinaciones de corte y calificarlas (cuál es la mejor/más óptima).
Hasta ahorita tengo un código que supuestamente pone las posibles combinaciones, pero al momento de ejecutarlo después de las primeras combinaciones en las demás no aparecen todos los cortes, y estoy pensando en cómo puedo hacer para calificarlas, ¿alguna idea? Gracias
CÓDIGO:
Se tienen "s" cantidad de barras de "x" longitud a las cuales se harán "m" cantidad de cortes de "y" longitud, obtener el residuo de los cortes, además las posibles combinaciones de corte y calificarlas (cuál es la mejor/más óptima).
Hasta ahorita tengo un código que supuestamente pone las posibles combinaciones, pero al momento de ejecutarlo después de las primeras combinaciones en las demás no aparecen todos los cortes, y estoy pensando en cómo puedo hacer para calificarlas, ¿alguna idea? Gracias
CÓDIGO:
Código: [Seleccionar]
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int s, n=0, cont=1, m, i, j, q, a, z;
System.out.print("Numero de barras de las que se obtendran las piezas : ");
s = scan.nextInt();
int b[] = new int[s];
do{
System.out.print("Longitud de la barra " + cont + ": ");
b[n] = scan.nextInt();
n++;
cont++;
}while (n<s);
System.out.print("Numero de piezas por cortar: ");
m = scan.nextInt();
int p[] = new int[m]; //Se designa el numero de piezas a cortar
n=0;
cont=1;
do{
System.out.print("Longitud de la pieza " + cont + ": ");
p[n] = scan.nextInt();
n++;
cont++;
}while (n<m); //controla cuantas longitudes de piezas se van ingresando
int barras[][] = new int[s][s]; //se crean los arreglos bidimensionales para combinaciones
int piezas[][] = new int[m][m]; //de tamaño de las barras y de las piezas
//PASA EL ARREGLO DE BARRAS AL ARREGLO BIDIMENSIONAL DE BARRAS
for (n=0; n<s; n++){ //n<num de barras
q=n;
for (cont=0; cont<s; cont++){ //cont< num de barras
barras[n][q] = b[cont]; //se ingresa en la posicion {n}{q} del bidimensional barras lo que hay en barras{cont}
q++;
if (q>=s){ //si control de ingreso de barras es mayor o igual al num de barras
q = q - s; //se resta el control de ingr.barras menos el num de barras
}
}
}
//PASA DEL ARREGLO DE PIEZAS A BIDIMENSIONAL DE PIEZAS
for (n=0; n<m; n++){
q=n;
for (cont=0; cont<m; cont++){
piezas[n][q] = p[cont];
q++;
if (q>=m){
q = q - m;
}
}
}
//SE CREAN ARREGLOS AUXILIARES DE BARRAS Y PIEZAS DE TAMAÑO DEL # DE PIEZAS Y BARRAS
int auxb[][] = new int[s][s];
int auxp[][] = new int[m][m];
int cpb[][]= new int [100][100]; //Almacenará los cortes por pieza
for (i=0; i<s; i++){
for (j=0; j<m; j++){
for(q=0; q<s; q++){ //pasa lo que hay en el arreglo de barras a auxiliar de barras
auxb[i][q] = barras[i][q];
}
for(q=0; q<m; q++){ //pasa lo que hay en el arreglo de piezas a auxiliar de piezas
auxp[j][q] = piezas[j][q];
}
q=0; //restaura en cero a "q"
for (n=0;n<s;n++){ //cuando n sea menor que la cantidad de barras
for (cont=0;cont<m;cont++){ //cuando cont sea menor que la cantidad de cortes
if (barras[i][n]>=piezas[j][cont] && piezas[j][cont]!=0){
barras[i][n] = (barras[i][n] - piezas[j][cont]);
cpb[n][q]=piezas[j][cont]; //guarda el valor de la pieza que se restó o corto
piezas[j][cont]=0; //ese lugar se iguala a cero
q++;
}
}
}
q=0;
while(q<m && piezas[j][q]==0){
q++;
}
if (q==m){
a=1;
z=0;
System.out.print("Probabilidad " + i + "," + j + " \n");
for (q=0; q<s; q++){
System.out.print("El valor del residuo de la barra " + a + " es: " + barras[i][q] + ", con cortes de ");
while (cpb[q][z]!=0){
System.out.print(cpb[q][z] + ", ");
z++;
}
System.out.print("\n");
a++;
}
System.out.print("\n");
}
else
System.out.print("No se pueden realizar los cortes con las barras dadas \n");
for(q=0; q<s; q++){
barras[i][q] = auxb[i][q];
}
for(q=0; q<m; q++){
piezas[j][q] = auxp[j][q];
}
}
}
}