int metodo2(int hombres,int mujeres,int mesas)
{
int retval=0;
int hombresXMesa,mujeresXMesa,restoHombres,restoMujeres;
int itemMayor,itemMenor,restoItemMayor,restoItemMenor; //variables auxiliares
//Calculo el numero de hombres por mesa y las que sobran
hombresXMesa=hombres/mesas;
restoHombres=hombres%mesas;
//Calculo el numero de mujeres por mesa y las que sobran
mujeresXMesa=mujeres/mesas;
restoMujeres=mujeres%mesas;
//Uso unas variables auxiliares donde almaceno el valor mayor y su resto y
//el menor y su resto
if(hombresXMesa > mujeresXMesa){
itemMayor=hombresXMesa;
restoItemMayor=restoHombres;
itemMenor=mujeresXMesa;
restoItemMenor=restoMujeres;
}else{
itemMayor=mujeresXMesa;
restoItemMayor=restoMujeres;
itemMenor=hombresXMesa;
restoItemMenor=restoHombres;
}
//Comprobacion del reparto
if(itemMayor > itemMenor){ //Si uno es mayor que otro
//Toca repartir las personas sobrantes en las mesas y dependiendo de cada
//situacion la comprobacion varia
if(restoItemMayor > restoItemMenor && itemMayor - itemMenor >= 2)
//Si sobran mas del mayor que del menor y la diferencia entre hombres y
//mujeres por mesa es de 2 o mas no se puede ya que al repartir se sobrepasarian
//las dos personas de mas
retval=0;
else if(restoItemMayor > restoItemMenor && itemMayor - itemMenor < 2)
//Si sobran mas del mayor que del menor y la diferencia entre hombres y
//mujeres por mesa es menor que 2 si se podrá
retval=1;
else if(restoItemMayor < restoItemMenor && itemMayor - itemMenor <= 2)
//Si sobran menos del mayor que del menor y la diferencia entre hombres y
//mujeres por mesa es de 2 o menos si se podrá
retval=1;
else if(restoItemMayor == restoItemMenor && itemMayor - itemMenor <= 2)
//Si sobran la misma cantidad de hombres que de mujeres si se podrá siempre
//y cuando la diferencia entre mujeres y hombres por mesa sea de 2 o menos
retval=1;
else if(itemMayor - itemMenor > 2)
//Si la diferencia entre hombres y mujeres por mesa es de mas de 2 no se puede
retval=0;
}else{
//Si la cantidad de hombres y mujeres por mesa son iguales siempre será posible
//el reparto
retval=1;
}
if(retval==1){ //Si se pudo repartir correctamente
printf("Reparto posible. Se reparte de la siguiente manera:\n");
if(restoHombres > 0 && restoMujeres > 0){ //Si sobraban hombres y mujeres
if(restoHombres > restoMujeres){ //Si sobraron mas hombres que mujeres
printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa+1,mujeresXMesa+1,restoMujeres);
printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa+1,mujeresXMesa,restoHombres - restoMujeres);
printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa,mujeresXMesa,mesas - restoHombres);
}else if(restoHombres < restoMujeres){ //Si sobraron mas mujeres que hombres
printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa+1,mujeresXMesa+1,restoHombres);
printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa,mujeresXMesa+1,restoMujeres - restoHombres);
printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa,mujeresXMesa,mesas - restoMujeres);
}else{ //Si sobraron la misma cantidad de hombres y de mujeres
printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa+1,mujeresXMesa+1,restoHombres);
printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa,mujeresXMesa,mesas - restoMujeres);
}
}else if(restoHombres > 0){ //Si sobraron solo hombres
printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa+1,mujeresXMesa,restoHombres);
printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa,mujeresXMesa,mesas - restoHombres);
}else{ //Si sobraron solo mujeres
printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa,mujeresXMesa+1,restoMujeres);
printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa,mujeresXMesa,mesas - restoMujeres);
}
}else{ //Si no se pudo realizar un reparto correcto
printf("Reparto imposible.\n");
}
return retval;
}