"Cogito ergo sum."

"Remember, remember The fifth of November The gunpowder treason and plot. I know of no reason Why the gunpowder treason Should ever be forgot." - V for Vendetta

Friss topikok

Linkblog

Permutáljunk.....

2011.09.02. 12:47 Painkiller19910110

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
 

Szólj hozzá!

A bejegyzés trackback címe:

https://painkillerblogja.blog.hu/api/trackback/id/tr593197634

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása