Basicamente el programa funciona(deberia hacerlo) asi:
Se ingresa la cantidad de digitos
segun eso, se calcula el factorial para saber cuantas distintas combinaciones hay, y se crea una matriz de esas dimensiones
la matriz se inicia en 0
Se carga la primer convinacion en la matriz
mientras el primer elemento de la fila sea distinto a 0, va a ir comparando numero a numero, para ver si la combinacion es la misma
si es la misma la descarta y crea una nueva, si no es la misma acumula
si la cantidad de acumulaciones -1 es igual al indice de fila, significa que eran todas distintas, y guarda esa convinacion es esa fila
y asi hasta terminar
pero bueno, eso es lo que deberia hacer, no lo que hace
aca les tiro mi codigo:
#include <iostream>
#include <Time.h>
#include <cstdlib>
using namespace std;
void CargaVector(int vec[],int digitos)
{
int z=0,error,N;
while (vec[digitos-1] == 0)
{
error=1;
while (error == 1)
{
error=0;
N = (rand() % digitos) + 1;
for (int a=0;a<z;a++)
if (N == vec[a])
error=1;
if (error == 0)
vec[z]=N;
}
z++;
}
}
int main()
{
int N,x,y,digitos,aux,fact,error,bien=1,ban;
cout << "Digitos: ";
cin >> digitos;
aux = digitos;
fact = digitos;
while (aux-1 > 1)
{
fact = fact*(aux-1);
aux--;
}
int mat[fact][digitos],vec[digitos];
for (x=0;x<fact;x++)
for (y=0;y<digitos;y++)
mat[x][y] = 0;
for (x=0;x<digitos;x++)
vec[x]=0;
CargaVector(vec,digitos);
//
x=0;
for (y=0;y<digitos;y++)
mat[x][y] = vec[y];
CargaVector(vec,digitos);
while (mat[fact-1][digitos-1] == 0) //mientras el ultimo elemento de la matriz siga siendo 0
{
x=0;
---> while (mat[x][0] != 0) //mientras el primer elemento de la fila sea distinto de 0 (aca va a estar comparando, para no repetir combinaciones)
{
bien=0;
ban=0;
for (y=0;y<digitos;y++)
if (mat[x][y] != vec[y] && ban == 0)
{
bien++;
ban++;
}
if (bien == 0) //si bien sigue siendo 0 es porque hubo una combinacion coincidente, vuelvo a generar una combinacion en mi vector auxiliar y mando al final del ciclo
{
CargaVector(vec,digitos);
continue;
}
x++;
---> }
if (bien-1 == x)
for (y=0;y<digitos;y++)
mat[x][y] = vec[y];
}
return 0;
}
Al parecer nunca llega a salir del ciclo que marque con flechitas
Una ayudilla, dato, consejo?