Description
农夫为他的牲口棚安装了一套新的安全系统。现在需要为牛群中的每头母牛设定一个有效的秘密。一个有效的密码由L(3 <= L <= 15)个不同的小写字母组成(即为传统的拉丁字符’a’…’z’),其中至少包含一个元音字母('a', 'e', 'i', 'o', 或'u')和至少两个辅音字母(非元音字母),而且字母必须按字母表顺序排列(如:'abc' 是有效密码; 'bac' 是无效密码)。
Input
第一行是两个整型数L和C( 3 <= L <= 15 )( L <= C <= 20 ),以空格间隔。 第二行是构成密码字符串的C个小写字母,以空格间隔。
Output
输出是一个长度为L的密码字符串(密码字符串中没有空格)。同时要求密码字符串必须按字母表的顺序依次输出。密码字符串之间以换行间隔。
Sample Input
4 6
a t c i s w
Sample Output
acis
acit
aciw
acst
acsw
actw
aist
aisw
aitw
astw
cist
cisw
citw
istw
代码
#include#include #include using namespace std; char alp[21], str1[21], str2[21], str3[21]; int yy(string a, int l) // 判断元音个数 { int cnt = 0; for(int i = 0; i < l; i++) { if(a[i] == 'a' || a[i] == 'e' || a[i] == 'i' || a[i] == 'o' || a[i] == 'u' ) cnt++; } return cnt; } int main() { int l, c; int yycnt; cin >> l >> c; for(int i = 0; i < c; i++) cin >> alp[i]; sort(alp, alp + c); do { yycnt = yy(alp, l); if(yycnt > 0 && l - yycnt > 1) { for(int i = 0; i < l; i++) str1[i] = alp[i]; strcpy(str2, str1); sort(str2, str2 + l); if(!strcmp(str2, str1)) { if(strcmp(str3, str1)) { strcpy(str3, str1); cout << str1 << endl; } } } }while(next_permutation(alp, alp + c)); // 全排列算法 }
Comments | NOTHING