Advertisement
RMarK0

Untitled

Apr 28th, 2021
640
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.79 KB | None | 0 0
  1. #include <stdio.h>
  2. #define N 4
  3.  
  4. main()
  5. { char s[N+1], t; int i, j, r, k;
  6.  
  7.  for(i=0; i<N; i++) s[i] = '1'+i;
  8.  s[N] = '\0';
  9.  
  10.  while(1) {
  11.    printf("%s\n", s);
  12.        // Находим самое правое место, где s[i] < s[i+1]
  13.    for(i=N-1; i>=0 && s[i] > s[i+1]; i--) ;
  14.    if (i<0) break; // Уже получили "654321" - самую старшую перестановку
  15.        // Находим s[j] - наименьший элемент справа от s[i] и больший его
  16.    for(j=N-1; s[i] > s[j]; j--) ;
  17.        // Меняем s[i] <-> s[j]
  18.    t = s[j];
  19.    s[j] = s[i];
  20.    s[i] = t;
  21.        // То, что за "i" - переворачиваем
  22.    for(k=i+1, r=N-1; r > k; k++, r--) {
  23.      t = s[r];
  24.      s[r] = s[k];
  25.      s[k] = t;
  26.    }
  27.  }
  28. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement