首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

POJ 3371 Flesch Reading Easy - 文本可讀性指數計算模擬題

     編輯:C++ 入門

題目背景

Flesch Reading Ease 是一個經典的英文文本可讀性評分公式。給定一篇規範文本,需統計三項指標並代入公式:

  • 句子數:以 . ? : ; ! 分隔
  • 單詞數:以空格和逗號 , 分隔
  • 音節數:按特定規則計算

公式:206.835 - 1.015 × (單詞數/句子數) - 84.6 × (音節數/單詞數),結果保留兩位小數。

音節計算規則詳解

  1. 單詞長度 ≤ 3 → 音節數 +1
  2. 單詞長度 > 3:
    • 掃描字符,遇到元音字母 a e i o u y(不分大小寫)且前一字符非元音 → 音節數 +1(連續元音只計一次)
    • 特殊後綴扣除:單詞以 -es、-ed、-e 結尾時,該後綴的 e 不計入音節;但 -le 結尾例外,需計入。

模擬實現要點

  • 逐詞讀入(scanf("%s") 自動按空白分隔),檢查末尾標點符號以判斷句子結束並統計單詞。
  • 維護 qian 标记前一字符是否為元音,實現「連續元音只計一次」。
  • 後綴處理需區分單詞是否帶標點:若帶標點,實際字母部分向前偏移一位。

核心 C 代碼片段

bool is_yuan(char c) {
    return strchr("aeiouyAEIOUY", c) != NULL;
}

int main() {
    char s[1010];
    int sentences = 0, words = 0, syllables = 0;
    while (~scanf("%s", s)) {
        bool qian = false;
        int len = strlen(s);
        // 1. 基礎音節統計
        if (len <= 3) syllables++;
        else {
            if (is_yuan(s[0])) { syllables++; qain = true; }
            for (int i = 1; i < len; i++) {
                if (is_yuan(s[i]) && !qian) { syllables++; qian = true; }
                else if (!is_yuan(s[i])) qian = false;
            }
        }
        // 2. 後綴修正
        bool hasPunct = strchr(".,;!?:", s[len-1]) != NULL;
        int last = hasPunct ? len-2 : len-1;
        // 檢查 -e, -es, -ed (排除 -le)
        if (last >= 1 && s[last] == 'e' && s[last-1] != 'l' && !is_yuan(s[last-1])) syllables--;
        else if (last >= 2 && s[last] == 's' && s[last-1] == 'e' && !is_yuan(s[last-2])) syllables--;
        else if (last >= 2 && s[last] == 'd' && s[last-1] == 'e' && !is_yuan(s[last-2])) syllables--;

        // 3. 句子與單詞計數
        if (hasPunct) sentences++;
        words++;
    }
    printf("%.2f\n", 206.835 - 1.015*words/sentences - 84.6*syllables/words);
    return 0;
}

常見坑點

  • 大小寫不敏感:元音判斷需包含大寫。
  • -le 例外:如 apple 結尾 le 的 e 要計音節,不能扣除。
  • 輸入以 EOF 結束,while(~scanf(...)) 是標準寫法。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved