Következő programom megadott mennyiségű elemet fog hibátlanul permutálni.
Maximum 10 elemre képes :)
#include<iostream>
#include<cstdlib>
#include<cstdio>
int f;
using namespace std;
int
fakt (int j)
{
int i;
f = 1;
for (i = 1; i <= j; i++)
f = f * i;
return f;
}
int
main (void)
{
long long int a, b, i, j, k, l, m, p, t, s, q, egyezo;
int *tomb, *seged;
cout << "Kérlek add meg hány elemet akarsz permutálni: ";
cin >> a;
tomb = (int *) malloc (a * sizeof (int));
srand (time (NULL));
if (a < 1)
cout << "Nem megfelelő az érték!!!!" << endl;
else if (a == 1)
cout << "Azt meg minek permutálni!!" << endl;
else if (a > 10)
cout << "Túl magas az érték a változók kapacitásához!!" << endl;
else
{
cout << "Tehát " << a << " elemű tömböt szeretnél!" << endl;
cout << "Ennyi elemet " << fakt (a) <<
" féle képpen lehet permutálni!!!" << endl;
cout << "Ez egy " << a << " oszlopú és " << f <<
" sorú két dimenzós tömbbe fér bele!" << endl;
int **vegleges;
vegleges = (int **) malloc (f * sizeof (int *));
for (i = 0; i < f; i++)
vegleges[i] = (int *) malloc (a * sizeof (int));
for (j = 0; j < f; j++)
for (i = 0; i < a; i++)
vegleges[i][j] = 0;
t = 0;
while (t < f) //addig meg míg nincs legenerálva az összes permutáció
{
m = 0;
for (;;) //addig meg míg minden elem nem különbözik
{
for (i = 0; i < a; i++) //feltöltjük a segédtömböt véletlen számokkal
{
b = (rand () % a + 1);
tomb[i] = b;
}
for (l = 0; l < a; l++) //lecsekkoljuk hogy van-e egyezés
{
k = tomb[l];
tomb[l] = tomb[0];
tomb[0] = k;
for (i = 1; i < a; i++)
if (tomb[0] == tomb[i])
m++;
}
if (m == 0)
break;
else
m = 0;
}
if (t == 0)
{
for (i = 0; i < a; i++)
{
vegleges[0][i] = tomb[i];
cout << vegleges[0][i] << " ";
}
cout << endl;
t++;
}
else if (t > 0)
{
egyezo = 0;
for (j = 0; j < t; j++)
{
p = 0;
for (i = 0; i < a; i++)
if (vegleges[j][i] == tomb[i])
p++;
if (p == a)
egyezo++;
}
if (egyezo == 0)
{
for (i = 0; i < a; i++)
{
vegleges[t][i] = tomb[i];
cout << vegleges[t][i] << " ";
}
cout << endl;
t++;
}
}
}
}
return 0;
}
Kimenete------->
3 elem esetén:
Kérlek add meg hány elemet akarsz permutálni: 3
Tehát 3 elemű tömböt szeretnél!
Ennyi elemet 6 féle képpen lehet permutálni!!!
Ez egy 3 oszlopú és 6 sorú két dimenzós tömbbe fér bele!
2 1 3
3 2 1
1 3 2
1 2 3
3 1 2
2 3 1
real 0m0.289s
user 0m0.004s
sys 0m0.000s
4 elem esetén:
Kérlek add meg hány elemet akarsz permutálni: 4
Tehát 4 elemű tömböt szeretnél!
Ennyi elemet 24 féle képpen lehet permutálni!!!
Ez egy 4 oszlopú és 24 sorú két dimenzós tömbbe fér bele!
1 4 3 2
3 4 2 1
1 2 3 4
2 3 4 1
1 3 4 2
1 4 2 3
4 2 3 1
1 2 4 3
4 3 1 2
4 2 1 3
2 3 1 4
2 1 3 4
4 1 3 2
4 3 2 1
3 1 2 4
3 2 1 4
3 2 4 1
2 1 4 3
2 4 3 1
3 4 1 2
4 1 2 3
3 1 4 2
2 4 1 3
1 3 2 4
real 0m0.266s
user 0m0.008s
sys 0m0.000s
8 elem esetén: kis idő várakozás után....
40320 eshetőség lévén.....
real 15m36.352s
user 15m32.786s
sys 0m0.264s