#include <iostream>
using namespace std;
void formarTabla(int tabla[][100], const int &primero, const int &ultimo);
void completarTabla(int tabla, int eqInf, int eqSup, int diaInf, int diaSup, int eqInic);
main (){
int ultimo=0, medio=0;
do{
cout<<"Introduzca el numero de jugadores"<<endl;
cin>>ultimo;
if (ultimo<=1)
cout<< "ERROR!! El número de jugadores debe ser mayor que 1"<<endl;
}while (ultimo<=1);
//dias=ultimo-1; fila=ultimo+1; colum=ultimo
//Declaracion de la tabla
int tabla[ultimo+1][ultimo];
//Dias
for (int i=0; i<=ultimo-1; i++)
tabla[0][i]=i;
//Jugadores
for (int j=1; j<=ultimo; j++)
tabla[j][0]=j;
//Inicializa la tabla a 0 para evitar errores
for (int f=1; f<ultimo+1; f++)
for (int c=1; c<ultimo; c++){
tabla[f][c]=0;
tabla[f][c]=0;
}
formarTabla(tabla,1,ultimo);
cout<<endl<<" Jugador t t Dia"<<endl<<endl;
//mostrar la tabla
for (int f1=0; f1<ultimo+1; f1++){
for (int c1=0; c1<ultimo; c1++)
cout<<"t "<<tabla[f1][c1];
cout<<endl<<endl;
}
cout<<ultimo<<endl;
system ("pause");
}
void formarTabla(int tabla[][100], const int &primero, const int & ultimo){
if (ultimo - primero ==1){ //caso base
cout<<"caso base"<<endl;
tabla[primero][1]= ultimo;
tabla[ultimo][1]= primero;
}
else { //caso recursivo
cout<<"caso recursivo"<<endl;
int medio=(primero+ultimo)/2;
/*primera subsolución: participantes de 1 a 2k-1*/
formarTabla(tabla,primero,medio);
/*segunda subsolución: participantes de 2k-1+1 a 2k*/
formarTabla(tabla,medio+1,ultimo);
/*completa la tabla de los participantes de la primera subsolución con los de la segunda*/
completarTabla(tabla, primero, medio, medio, ultimo-1, medio+1);
/*completa la tabla de los participantes de la segunda subsolución con los de la primera*/
completarTabla(tabla, medio+1, ultimo, medio, ultimo-1, primero);
}
}
void CompletarTabla(int tabla, int eqInf, int eqSup, int diaInf, int diaSup, int eqInic){
for (int j=diaInf; j <= diaSup; j++)
tabla[eqInf][j]= (eqInic + j - diaInf);
for (int i = eqInf + 1; i <= eqSup; i++) {
/*Intercambio de contrincante*/
tabla[i][diaInf] = tabla[i-1][diaSup]; //el último contrincante de i-1 es ahora el primer contrincante de i
for (int j = diaInf + 1; j <= diaSup; j++)
/*rotación de los contrincantes*/
tabla[i][j] = tabla[i-1][j-1]; //el contrincante de ayer de i-1, es el contrincante de hoy para i
}
}