题目:点击打开链接
典型的字符串模拟题,没有什么算法,注意小细节。
代码中用vocnt记录连续元音个数,用cocnt记录连续辅音个数。
用布尔变量isHaveVo记录是否有元音,初始值赋为fasle
用布尔变量isac记录判断是否没有三个连续的元音或辅音或两个连续相同字母,初始值赋为true
布尔变量isShouldNext是当判断出该字符无法ac的时候终止继续从字符串中往下读字符。
注意gets(), strcmp(), 以及逗号表达式的应用。
(可以不用逗号表达式,为了节省点代码,也是为了巩固下逗号表达式不忘记,有兴趣可以做下百度百科里逗号表达式的题)
int x,y,z;
x=y=1;
z=x++,y++,++y;
printf("%d,%d,%d\n",x,y,z);
看下输出是什么。
好了,不闲扯了,代码0MS,216K, 如下:
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
bool isHaveVo, isac, isShouldNext;
char ch[21], plast;
int vocnt, cocnt;
while(gets(ch) && strcmp(ch, "end"))
{
isac=isShouldNext=true;
isHaveVo=false;
vocnt=cocnt=0;
for(int i=0; i<strlen(ch) && isShouldNext; ++i)
{
switch(ch[i])
{
case 'a':
case 'i':
case 'u':
(++vocnt, isHaveVo=true);
if(vocnt==3 || (vocnt==2 && plast==ch[i]))
{
isac=isShouldNext=false;
break;
}
cocnt=0;
plast=ch[i];
break;
case 'o':
case 'e':
(++vocnt, isHaveVo=true);
if(vocnt==3)
{
isac=isShouldNext=false;
break;
}
cocnt=0;
plast=ch[i];
break;
default:
++cocnt;
if(cocnt==3 || (cocnt==2 && plast==ch[i]))
{
isac=isShouldNext=false;
break;
}
vocnt=0;
plast=ch[i];
break;
}//end of switch
}//end of for
if(isac && isHaveVo)
printf("<%s> is acceptable.\n", ch);
else
printf("<%s> is not acceptable.\n", ch);
}
return 0;
}