描述有很多人在门口排队每个人将会被发到一个有效的通行密码作为门票。一个有效的密码由L3=L=15个小写英文字母组成至少有一个元音a、e、i、o或u和两个辅音除去元音以外的音节并且是按字母表顺序出现的例如abe是有效的而bac不是。现在给定一个期望长度为L和C1=C=26个小写字母写一个程序输出所有的长度为L、能由所给定的C个字母组成的有效密码。密码必须按字母表顺序打印出来一行一个。输入描述第1行是
#include
// 全局变量
int L, C;
vector
// 递归生成密码 void generatePasswords(int index, int vowelCount, int consonantCount) { // 递归终止条件 if (index == L) { // 检查密码是否有效 if (vowelCount >= 1 && consonantCount >= 2) { string validPassword = ""; for (char c : password) { validPassword += c; } validPasswords.push_back(validPassword); } return; }
// 递归生成密码
for (int i = 0; i < C; i++) {
password[index] = letters[i];
if (letters[i] == 'a' || letters[i] == 'e' || letters[i] == 'i' || letters[i] == 'o' || letters[i] == 'u') {
generatePasswords(index + 1, vowelCount + 1, consonantCount);
} else {
generatePasswords(index + 1, vowelCount, consonantCount + 1);
}
}
}
int main() { // 读取输入 cin >> L >> C; for (int i = 0; i < C; i++) { char c; cin >> c; letters.push_back(c); }
// 初始化密码数组
password.resize(L);
// 生成密码
generatePasswords(0, 0, 0);
// 按字母顺序排序密码
sort(validPasswords.begin(), validPasswords.end());
// 输出密码
int count = 0;
for (string validPassword : validPasswords) {
cout << validPassword << endl;
count++;
if (count >= 25000) {
break;
}
}
return 0;
原文地址: http://www.cveoy.top/t/topic/iPf5 著作权归作者所有。请勿转载和采集!