題目描述:
給定乙個由不同的小寫字母組成的字串,輸出這個字串的所有全排列。
我們假設對於小寫字母有』a』 < 『b』 < … < 『y』 < 『z』,而且給定的字串中的字母已經按照從小到大的順序排列。
輸入:
輸入只有一行,是乙個由不同的小寫字母組成的字串,已知字串的長度在1到6之間。
輸出:
輸出這個字串的所有排列方式,每行乙個排列。要求字母序比較小的排列在前面。字母序如下定義:
已知s = s1s2…sk , t = t1t2…tk,則s < t 等價於,存在p (1 <= p <= k),使得
s1 = t1, s2 = t2, …, sp - 1 = tp - 1, sp < tp成立。
樣例輸入:
abc
樣例輸出:
abc
acb
bac
bca
cab
cba對於乙個排列,以 1432 為例來講,我們尋找比它的下乙個排列,直至沒有更大的排列為止。
具體來說,我們從後往前尋找遞減的相鄰的字元對,這裡是 14 ,然後從後面選擇出比 1 大的最小的數字 2 ,兩者交換,此時後面必為乙個遞減序列,這裡是 431 ,將其逆轉變為 134 ,所以下乙個排列為 2134。
#include
#include
#include
#include
using
namespace
std;
#define maxsize 7
char *str;
bool nextrange(char * s)
}if(rc == '#') return
false;
for(int i= len -1;i>=1;i--)
}// replace and reverse
//replace
char tmp = s[rp1];
s[rp1] = s[rp2];
s[rp2] = tmp;
//reverse
for (int i = 0; i < (len - rp1) / 2; ++i)
return
true;
}int main() while (nextrange(str));
printf("\n");
}return
0;}
九度 1120 全排列
題目描述 給定乙個由不同的小寫字母組成的字串,輸出這個字串的所有全排列。我們假設對於小寫字母有 a b y z 而且給定的字串中的字母已經按照從小到大的順序排列。輸入 輸入只有一行,是乙個由不同的小寫字母組成的字串,已知字串的長度在1到6之間。輸出 輸出這個字串的所有排列方式,每行乙個排列。要求字母...
遞迴 九度1120 全排列
題目描述 給定乙個由不同的小寫字母組成的字串,輸出這個字串的所有全排列。我們假設對於小寫字母有 a b y z 而且給定的字串中的字母已經按照從小到大的順序排列。輸入 輸入只有一行,是乙個由不同的小寫字母組成的字串,已知字串的長度在1到6之間。輸出 輸出這個字串的所有排列方式,每行乙個排列。要求字母...
九度題目1069
include include include using namespace std struct student buf 1001 int main sort buf,buf n scanf d m while m 0 else if strcmp x,buf mid no 0 else top...