Flesch Reading Ease (poj 3371)

题意:

  给出一篇规范的文章,求其 句子数、单词数 和 音节数把这3个值代入题目给出的公式,输出其结果,保留2位小数。

  标记单词分隔符: 逗号(,) 和 空格( )

  句子分隔符:句号(.) 问号(?) 冒号(:) 分号(;) 感叹号(!)

  音节处理要求:

  (1)当单词总长度<=3时,音节数无条件+1

  (2) 当单词总长度>3时,单词中每出现一个元音字母(a、e、i、o、u、y),音节数+1,但是连续的(>=2)元音字母只按1个音节计算,且当单词后缀为-es、-ed和-e时,后缀的元  音字母e不列为音节数计算。但是后缀-le例外,要计算音节数。

ans=206.835-1.015*(danci/jvzi)-84.6*(yinjie/danci)

#include<cstdio>
#include<iostream>
#define N 1010
using namespace std;
char ci[N];
double danci,jvzi,yinjie;
bool yuan(char c)
{
    if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u'||c=='y')return true;
    return false;
}
int main()
{
    char c;int num=0;
    while(scanf("%c",&c)!=EOF)
    {
        if(c==','||c==' ')
        {
            if(num<=3)yinjie++;
            else
            {
                for(int i=1;i<=num;i++)
                {
                    if(yuan(ci[i])&&!yuan(ci[i-1]))
                    {
                        if((i==num-1&&ci[i]=='e'&&(ci[num]=='s'||ci[num]=='d'))||(i==num&&ci[i]=='e'&&ci[num-1]!='l'));
                        else yinjie++;
                    }
                }
            }
            danci++;
            num=0;
        }
        else if(c=='.'||c=='?'||c==':'||c==';'||c=='!')jvzi++;
        else ci[++num]=c;
    }
    double ans=206.835-1.015*(danci/jvzi)-84.6*(yinjie/danci);
    printf("%.2lf",ans);//G++不能用%lf ,要用%f 
    return 0;
}

 

posted @ 2016-10-25 21:11  karles~  阅读(467)  评论(0编辑  收藏  举报