Advertisement
ZiGGi

str variations

Dec 16th, 2018
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 0.84 KB | None | 0 0
  1. new
  2.     str[] = "abc",
  3.     len = strlen(str),
  4.     tmp, i, j, r, k;
  5.  
  6. do {
  7.     // Вывод очередной перестановки
  8.     printf("%s", str);
  9.  
  10.     // Находим самое правое место, где s[i] < s[i+1]
  11.     i = len - 1;
  12.     while (i >= 0 && str[i] > str[i + 1]) {
  13.         i--;
  14.     }
  15.  
  16.     // Уже получили самую старшую перестановку
  17.     if (i < 0) {
  18.         break;
  19.     }
  20.  
  21.     // Находим str[j] - наименьший элемент справа от str[i] и больший его
  22.     j = len - 1;
  23.     while (str[i] > str[j]) {
  24.         j--;
  25.     }
  26.  
  27.     // Меняем str[i] <-> str[j]
  28.     tmp = str[j];
  29.     str[j] = str[i];
  30.     str[i] = tmp;
  31.    
  32.     // То, что за "i" - переворачиваем
  33.     for (k = i + 1, r = len - 1; r > k; k++, r--) {
  34.         tmp = str[r];
  35.         str[r] = str[k];
  36.         str[k] = tmp;
  37.     }
  38. } while (i >= 0);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement