程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> LA 6805 Pantun Grader(模擬)

LA 6805 Pantun Grader(模擬)

編輯:C++入門知識

LA 6805 Pantun Grader(模擬)


FILE 6805 - Pantun Grader


題目大意:

按照給定的規則,給詩歌打分。有音節、押韻等規則。


解題思路:

仔細讀題,主題細節。輸入的逗號後不一定有空格。


參考代碼:

#include 
#include 
#include 
#include 
#include 
using namespace std;

const int MAXN = 210;
vector > sentence;
int nCase, cCase;

void init() {
    sentence.clear();
}

int calcSyllable(string word) {
    int len = word.length();
    if (len == 6 && (word.find("ng") != string::npos || word.find("Ng") != string::npos
    || word.find("ny") != string::npos || word.find("Ny") != string::npos)) return 2;
    if (len == 3 && (word[0] == 'a' || word[0] == 'A' || word[0] == 'e' || word[0] == 'E' || word[0] == 'i'
    || word[0] == 'I' || word[0] == 'o' || word[0] == 'O'  || word[0] == 'u' || word[0] == 'U')) return 2;
    if (len >= 6) return 3;
    if (len == 4 || len == 5) return 2;
    if (len <= 3) return 1;
}

void solve() {
    int syllable[MAXN] = {0}, A = 0, B = 0, C = 0, D = 0, E = 0;
    string last[MAXN];

    int n = min(4, (int)sentence.size());

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < sentence[i].size(); j++) {
            syllable[i] += calcSyllable(sentence[i][j]);
            if (j == (int)sentence[i].size() - 1) {
                last[i] = sentence[i][j].substr(sentence[i][j].size() - 2);
            }
        }
        if (syllable[i] >= 8 && syllable[i] <= 12) A += 10;
    }

    for (int i = 0; i < n - 2; i++) {
        if (last[i] == last[i + 2]) B += 20;
    }

    for (int i = 0; i < n - 2; i++) {
        if (syllable[i] == syllable[i + 2]) C += 10;
    }

    if (sentence.size() > 4) {
        D = ((int)sentence.size() - 4) * 10;
    }

    E = A + B + C - D;

    printf("Case #%d: %d %d %d %d %d\n", ++cCase, A, B, C, D, E);
}

int main() {
    scanf("%d", &nCase);
    while (nCase--) {
        init();
        bool flag = false;
        string tmp;
        while (true) {
            string str;
            vector ss;
            if (flag) {
                ss.push_back(tmp);
                flag = false;
            }
            while (cin >> str && str[str.length() - 1] != ',' && str[str.length() - 1] != '.') {
                if (str.find(',') != string::npos) {
                    int pos = str.find_first_of(',');
                    ss.push_back(str.substr(0, pos));
                    sentence.push_back(ss);
                    tmp = str.substr(pos+1);
                    flag = true;
                    break;
                }
                ss.push_back(str);
            }
            if (flag) continue;
            if (str != "." && str != ",") ss.push_back(str.substr(0, str.length() - 1));
            if (str[str.length() - 1] == '.') {
                sentence.push_back(ss);
                solve();
                break;
            }
            if (str[str.length() - 1] == ',') {
                sentence.push_back(ss);
            }
        }
    }
    return 0;
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved