Permutacje
Kod był wyświetlany 1430 razy.
    /*
  Name: Permutacje
  Copyright: GPL GNU
  Date: 27-10-2007 19:00:40
  Description: 
  Algorytm: Permutacje
Dane: n - długość permutacji
Wynik: ciąg zawierający wszystkie permutacje liczb 0, . . . , n − 1
N = n! − 1
for l = 0 to N do { m = l // m − zmienna pomocnicza
for k = 2 to n do { c[k − 2] = m mod k // c ma n − 1 elementów
m = m div k
}for k = 0 to n − 1 do p[k] = k // ciąg wyjściowy w nat. kolejności
for k = n downto 2 do { j = c[k − 2] ; zamień (p[j], p[k − 1])
}Write (p)
}
*/

#include <iostream>
using namespace std;

int silnia(int n)
{
  int silnia=1;
  for (int i=2; i<=n; i++)
    silnia*=i;
  return silnia;
}

int main ()
{
  int l, k, n, m, N, j; 
  int *p, *x, *c;
  cout << "\n\n\tPodaj liczbe elementow w tablicy n: ";
  cin >> n;
  N = silnia(n) - 1;
  
  p = new int[n];
  c = new int[n-1];
  x = new int [n];
  
  cout << "\n\n\tPodaj elementy tablicy\n";
  cout<<"\t";
  
   for (k=0; k<n; k++)
  {
    cout<<"\n\tElement "<<k+1<<" tablicy: ";
    cin >> x[k];
  }
  cout<<"\n\n";
  system("pause");
  system("cls");
   cout<<"\n\n\t\tPERMUTACJE\n\n\n";
  
  for (l=0; l<=N; l++)
  {
    m=l;
    for (k=2; k<=n; k++)
    {
      c[k-2] = m % k;
      m = m / k;
    }
  
    for (k=0; k<=n-1; k++)
      p[k] = k;
      for (k=n; k>=2; k--)
    {
      j=c[k-2];
      swap (p[j], p[k-1]);     
    }
   
     for (k=0; k<n; k++)
     cout <<"\t"<<x[p[k]] << " ";
     cout <<endl<<endl; 
  }
  
  cin.ignore();
  getchar();  
  return 0;
}
    
Pobierz plik tekstowy
Administrator WJL
PHP&SQL coded by NOVA-IT