C++ 初级编程

来源:百度知道 编辑:UC知道 时间:2024/06/04 08:41:56
为果园客户设定密码
虚拟果园一批新品种的芒果就要成熟了。为了让游园的客户都能吃到芒果并且防止有人破坏果园,果园安装了一个新的安全系统,并且要给每一个游园客户分配一个有效的密码。一个有效的密码由L(3 <= L <= 15)个小写字母(来自传统的拉丁字母集'a'...'z')组成,至少有一个元音('a', 'e', 'i', 'o', 或者 'u'),至少两个辅音(除去元音以外的音节),并且按字母表顺序出现(例如,'acd'是有效的,而'dac'不是)。

给定一个期望长度L和C个小写字母,写一个程序,打印出所有的长度为L、能由这些字母组成的有效密码。密码必须按字母表顺序打印出来,一行一个。
题目名称: password
输入格式:
* 第一行: 两个由空格分开的整数,L和C
* 第二行: C个空格分开的小写字母,密码是由这个字母集中的字母来构建的。
输入样例:
4 6
a t c i s w
输入详细说明:
由从给定的六个字母中选择的、长度为4的密码。
输出格式:
* 第一至?行: 每一个输出行包括一个长度为L个字符的密码(没有空格)。输出行必须按照字母顺序排列。

输出样例 (文件 passwd.out):
acis
acit
aciw
acst
acsw
actw
aist
aisw
aitw
astw
cist
cisw
citw
istw

测试通过,输入例如:
4 6
atcisw

#include<stdio.h>

bool IsYuanYin(char ch)
{
if (ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u')
return true;
else
return false;
}

void SortStr(char *s,int len)
{
char ch;
for (int i=0;i<len-1;i++)
{
for (int j=i+1;j<len;j++)
{
if (s[i]>s[j])
{
ch = s[i];
s[i] = s[j];
s[j] = ch;
}
}
}
}

void comb (char *src,char *dst,int m,int k)
{
int i,j;
bool valid = false;
for(i=k;i<=m;i++)
{
dst[k-1]=src[i-1];
if(k>1)
comb(src,dst,i-1,k-1);
else
{
for(j=0;dst[j]!='\0';j++)
{
if (IsYuanYin(dst[j]))
{
valid = true;
break;
}
}
if(