HDU1039 Easier Done Than Said?
现在输入一行密码,要你判断这个密码是否是可行的。可行的密码要符合以下3个要求:
1.密码至少包含一个元音字母
2.密码不能包括连续3个的元音或连续3个辅音字母
3.密码不能包括两个连续的相同字母,但是ee或oo是允许的。
输入:包含多个实例,每个实例占一行,最后一行以“end”表示结束。每行最少包含一个最多由20个小写字母组成。
输出:以<a> is acceptable.或<tv> is not acceptable.来表示密码是否合适。
分析:直接读入每行的单词,然后根据以上3条规则依次判断即可。
AC代码:
#include<cstdio>
#include<cstring>
#include<set>
using namespacestd;
chars[]={'a','e','i','o','u'};
bool is_yuan(charx)//判断字母是否是元音字母
{
for(int i=0;i<5;i++)
if(x==s[i])
return true;
return false;
}
char pwd[30];
int main()
{
while( scanf("%s",pwd)==1&& strcmp(pwd,"end")!=0 )//读入一个密码
{
bool ok1=false,ok2=true,ok3=true;//ok1,ok2,ok3分别代表3个条件是否满足,true表满足
int len = strlen(pwd);
for(int i=0;i<len;i++)//是否有至少一个元音字母
{
if(is_yuan( pwd[i] ))
{
ok1=true;
break;
}
}
if(ok1)
{
for(int i=0;i<len-2;i++)//不能连续3个元音或连续3个辅音在一起
{
if( is_yuan(pwd[i])&&is_yuan(pwd[i+1])&&is_yuan(pwd[i+2]))
{
ok2=false;
break;
}
else if( !is_yuan(pwd[i])&& !is_yuan(pwd[i+1])&& !is_yuan(pwd[i+2]))
{
ok2=false;
break;
}
}
}
if(ok1&&ok2)
{
for(int i=0;i<len-1;i++)//不能两个相同字母(除ee,oo)在一起
{
if(pwd[i]==pwd[i+1]&&pwd[i]!='e'&&pwd[i]!='o')
{
ok3=false;
break;
}
}
}
printf("<%s> is",pwd);
if(ok1&&ok2&&ok3)printf(" acceptable.\n");
else printf(" notacceptable.\n");
}
return 0;
}