2011年7月31日 星期日

c091: Hiaku Review

內容 :
    Haiku(俳句)是日本古代的一種詩詞。他是由五音節、七音節、五音節之三句共17音節所組成之短詩。Haiku不需要押韻。以下是一個例子,句子間以斜線分開:

Computer programs/The bugs try to eat my code/I must not let them.

    你的任務是寫一個程式,讀進一首haiku,並檢查其音節。

輸入說明 :
    每組測試資料一列Haiku,一定含有3個句子,每個句子至少含有1個字,字與字間以一空白字元或斜線分隔。斜線也是用來分隔句子的,所以一列中一定含有2個斜線。Haiku只含有小寫的英文字母(a~z),斜線,空白字元。每列的長度不會超過200個字元。

    輸入列為e/o/i代表輸入結束。請參考Sample Input。

    你的認識是判斷每個句子是否有正確的音節(5/7/5)。在本問題中,一個音節指的是連續的母音字母形成的字元序列。母音字母包含a,e,i,o,u,y。每個字至少包含一音節。

    注意:在這裡算音節的方式跟英文念法並不一致。例如在以下第2個sample input中,code這個字在本程式中應該算為2個音節,因為o和e並不連續。然而,若以英文念code這個字其實只有一個音節。

輸出說明 :
    對每一組測試資料,如果此Haiku不正確,請輸出第一個含有不對音節個數的句子是哪一個。(也就是說:若第一個句子的音節個數不對,請輸出1。否則,若 第二個句子的音節個數不對,請輸出2。否則,若第三個句子的音節個數不對,請輸出3。)若三個句子音節的個數全對則請輸出Y。

範例輸入 :
happy purple frog/eating bugs in the marshes/get indigestion
computer programs/the bugs try to eat my code/i will not let them
a e i o u/this is seven syllables/a e i o u y e/o/i

範例輸出 :
Y
2
3

出處 :
ACM 576

程式碼 :
#include<stdio.h>

char s[201];
int i;

int find(char ch)
{
    int check = 0, syllables = 0;
    
    for(;s[i] != ch; i++)
    {
        if(s[i]=='a' || s[i]=='e' || s[i]=='i' || s[i]=='o' || s[i]=='u' || s[i]=='y')
        {
            if(check == 0)
            {
                syllables++;
                check = 1;
            }
        }
        else
            check = 0;
    }
    i++;
    return syllables;
}

int main()
{   
    int temp;
    while(gets(s) != NULL)
    {
        if(s[0]=='e' && s[1]=='/' && s[2]=='o' && s[3]=='/' && s[4]=='i')
            break;
        i = 0;
        if((temp=find('/')) != 5)
            printf("1\n");
        else if(temp=find('/') != 7)
            printf("2\n");
        else if(temp=find('\0') != 5)
            printf("3\n");
        else
            printf("Y\n");
    }    
    return 0;
}



http://zerojudge.tw/ShowProblem?problemid=c091

沒有留言:

張貼留言