Advertisement
Rayzven

gen transposition

Feb 12th, 2020
248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.08 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. void swap(int *a, int i, int j)
  4. {
  5.   int s = a[i];
  6.   a[i] = a[j];
  7.   a[j] = s;
  8. }
  9. bool NextSet(int *a, int n)
  10. {
  11.   int j = n - 2;
  12.   while (j != -1 && a[j] >= a[j + 1]) j--;
  13.   if (j == -1)
  14.     return false; // больше перестановок нет
  15.   int k = n - 1;
  16.   while (a[j] >= a[k]) k--;
  17.   swap(a, j, k);
  18.   int l = j + 1, r = n - 1; // сортируем оставшуюся часть последовательности
  19.   while (l<r)
  20.     swap(a, l++, r--);
  21.   return true;
  22. }
  23. void Print(int *a, int n)  // вывод перестановки
  24. {
  25.   static int num = 1; // номер перестановки
  26.   cout.width(3); // ширина поля вывода номера перестановки
  27.   cout << num++ << ": ";
  28.   for (int i = 0; i < n; i++)
  29.     cout << a[i] << " ";
  30.   cout << endl;
  31. }
  32. int main()
  33. {
  34.   int n, *a;
  35.   cout << "N = ";
  36.   cin >> n;
  37.   a = new int[n];
  38.   for (int i = 0; i < n; i++)
  39.     a[i] = i + 1;
  40.   Print(a, n);
  41.   while (NextSet(a, n))
  42.     Print(a, n);
  43.   cin.get(); cin.get();
  44.   return 0;
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement