本文共 1633 字,大约阅读时间需要 5 分钟。
题意:给定字符串(长度最大为13),字母可能有重复,要求按升序输入其所有的全排列,注意,字母的大小顺序为A<a<B<b<...<Z<z
算法:1.dfs
2.STL
/*算法:dfs */#include#include #include using namespace std;char c[20]; // 存储输入的字符串 char ans[20]; // 存放结果 int cnt[100]; // 存放每个字母出现的次数 bool cmp(const char &a, const char &b){ if (a >= 'A' && a <= 'Z' && b >= 'A' && b <= 'Z') { return a < b; } else if (a >= 'a' && a <= 'z' && b >= 'a' && b <= 'z') { return a < b; } else if (a >= 'A' && a <= 'Z' && b >= 'a' && b <= 'z') { return a + 32 <= b ; } else if (a >= 'a' && a <= 'z' && b >= 'A' && b <= 'Z') { return a < b+32; }}void dfs(int curr, int n){ if (curr == n) { ans[n] = '\0'; cout << ans << endl; return; } for (int i=0; i 0) { cnt[c[i]-'A']--; ans[curr] = c[i]; dfs(curr+1,n); cnt[c[i]-'A']++; } } }}int main(){ int cases; cin >> cases; for (int i=0; i > c; int len = strlen(c); sort(c,c+len,cmp); memset(cnt,0,sizeof(cnt)); for (int i=0; i
/*算法:STL */#include#include #include using namespace std;bool cmp(const char &a, const char &b){ if (a >= 'A' && a <= 'Z' && b >= 'A' && b <= 'Z') { return a < b; } else if (a >= 'a' && a <= 'z' && b >= 'a' && b <= 'z') { return a < b; } else if (a >= 'A' && a <= 'Z' && b >= 'a' && b <= 'z') { return a + 32 <= b ; } else if (a >= 'a' && a <= 'z' && b >= 'A' && b <= 'Z') { return a < b+32; }}int main(){ int cases; char c[20]; cin >> cases; for (int i=0; i > c; int len = strlen(c); sort(c,c+len,cmp); cout << c << endl; while(next_permutation(c, c+len, cmp)) { cout << c << endl; } }}
转载地址:http://brlbb.baihongyu.com/