Hola, gracias por contestarme. Ya estuve mirando sobre combinaciones y ya he conseguido resolverlo.
He aqui un ejemplo con 10.
Los array Locked son las personas que quiero que estén a la fuerza en un equipo.
Código C++:
Ver original/* Nombre del programa: */
/* Descripción del programa: */
/* Restricción de datos de entrada: */
/* Fecha de creación: */
/* Versión: */
/* Inclusion de archivos de cabecera */
#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <math.h>
#include <cstdio>
#include <cstring>
using namespace std;
/* Cabeceras de nuestras propias funciones */
/* Programa principal */
int main (){
/* Declaración de variables auxiliares*/
int i,j,k,l,n;
int s;
int x;
float STeam1;
float STeam2;
int TamLock1;
int TamLock2;
/* Declaracion de variables contadoras */
/* Declaración de variables principales */
float Slots[10]={1500,1653,1507,1506,1518,1556,1707,1680,1558,1597}; //Array with players' points.
int Locked1[5]={0,-1,-1,-1,-1}; //Players locked on team 1.
int Locked2[5]={6,7,-1,-1,-1}; //Players locked on team 2.
float Porcentajes[10]; //Array with the percentages of the players.
float Equipo1[5]; //Team 1 points.
float Equipo2[5]; //Team 2 points.
float Suma1; //Here it will be added 5 players to calculate the best error.
float SumaTotal; //All points.
float Error; //Currently error.
float ErrorFinal=100; //Final Error (The best error).
int p1[5]; //Pointer of players selected to be in team 1.
int p2[5]; //... team 2.
bool Existen; //Just to help getting "p2[]" values.
bool Verdad;
/* Inicialización de variables */
Suma1=0;
SumaTotal=0;
STeam1=0;
STeam2=0;
TamLock1=0;
TamLock2=0;
s=1;
x=0;
k=s;
/* Input */
/* Procesamiento de datos */
/*Size of Locked Arrays*/
for(int h=0; h<5; h++){
if(Locked1[h]!=-1){
TamLock1++;
}
}
for(int h=0; h<5; h++){
if(Locked2[h]!=-1){
TamLock2++;
}
}
/*En of Size of Arrays*/
/*Total points*/
for (i=0; i<10; i++){
SumaTotal=SumaTotal+Slots[i];
}
/*Percentages per person*/
for (i=0; i<10; i++){
Porcentajes[i]=(Slots[i]/SumaTotal)*100;
}
/* BALANCE ALGORITHM*/
int m=0;
for(i=0; i<10; i++){
for(j=i+1; j<10; j++){
for(k=j+1; k<10; k++){
for(l=k+1; l<10; l++){
for(n=l+1; n<10; n++){
Verdad=true;
for(int h=0; h<TamLock2; h++){
if(i==Locked2[h]){
Verdad=false;
}
}
if(Verdad==true){
Verdad=true;
for(int h=0; h<TamLock2; h++){
if(j==Locked2[h]){
Verdad=false;
}
}
if(Verdad==true){
Verdad=true;
for(int h=0; h<TamLock2; h++){
if(k==Locked2[h]){
Verdad=false;
}
}
if(Verdad==true){
Verdad=true;
for(int h=0; h<TamLock2; h++){
if(l==Locked2[h]){
Verdad=false;
}
}
if(Verdad==true){
Verdad=true;
for(int h=0; h<TamLock2; h++){
if(n==Locked2[h]){
Verdad=false;
}
}
if(Verdad==true){
Verdad=false;
for(int h=0; h<TamLock1; h++){
if(i==Locked1[h] || j==Locked1[h] || k==Locked1[h] || l==Locked1[h] || n==Locked1[h]){
Verdad=true;
}
}
if(Verdad==true){
Suma1=Porcentajes[i]+Porcentajes[j]+Porcentajes[k]+Porcentajes[l]+Porcentajes[n];
Error=Suma1-50;
if(Error<0){
Error=Error*-1;
}
if(Error<ErrorFinal){
ErrorFinal=Error;
p1[0]=i;
p1[1]=j;
p1[2]=k;
p1[3]=l;
p1[4]=n;
}
m++;
}
}
}
}
}
}
}
}
}
}
}
for(int h=0; h<10; h++){
Existen=false;
for(int c=0; c<5; c++){
if(h==p1[c]){
Existen=true;
}
}
if(Existen==false){
p2[x]=h;
x++;
}
}
for(int h=0; h<5; h++){
Equipo1[h]=Slots[p1[h]];
}
for(int h=0; h<5; h++){
Equipo2[h]=Slots[p2[h]];
}
/* Output */
for (i=0; i<10; i++){
cout<<Slots[i]<<" is "<<Porcentajes[i]<<"% of "<<SumaTotal<<endl;
}
cout<<"Combinations: "<<m<<endl;
cout<<"Best Error: "<<ErrorFinal<<endl<<endl;
cout<<"Total points: "<<SumaTotal<<endl<<endl;
cout<<"Team 1"<<endl;
for(int h=0; h<5; h++){
cout<<Equipo1[h]<<endl;
STeam1=STeam1+Equipo1[h];
}
cout<<"Team 1 Points: "<<STeam1<<endl;
cout<<"Average team 1: "<<STeam1/5<<endl;
cout<<"\nTeam 2"<<endl;
for(int h=0; h<5; h++){
cout<<Equipo2[h]<<endl;
STeam2=STeam2+Equipo2[h];
}
cout<<"Team 2 Points: "<<STeam2<<endl;
cout<<"Average team 2: "<<STeam2/5<<endl;
/* Fin de la aplicacion (entorno MS-DOS) */
return 0;
}
/* Implementacion de mis funciones o procedimientos */
/***********************************************
Función X
Descripción:
************************************************/
// Solución de la función o procedimiento