2011年5月8日 星期日

ACM 494 Kindergarten Counting Game

此題的關鍵點在於"word的數目等於字母和非字母的交界點的數目"

I did! I did! I did taw a putty tat.
為例子
第一個I後面接的是空格,這邊就是一個"字母和非字母的交界點"
同理,第一個did的最後一個d後面是驚嘆號,這邊也是"字母和非字母的交界點"
依此判斷下去,會發現word的數目其實就是字母和非字母的交界點的數目 
還有一點要注意的是,UVa似乎不會有像"Ya"這種最後沒有標點符號的測資,
但ZeroJudge有這種很心機的測資= = 因此Code #1可以過UVa,卻不能過ZeroJudge。
而Code #2則可以處理這種心機的測資
(方法一樣是word的數目等於字母和非字母的交界點的數目,不同點是換行符號也要處理) 
 
Code #1
#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char ch, prev;
    int c;
  
    c = prev = 0;
    while ((ch = getchar()) != EOF)
    {
        if (ch != '\n')
        {  
            if (isalpha(prev) && !isalpha(ch))
                c++;
            prev = ch;
        }
        else
        {
            printf("%d\n", c);
            c = prev = 0;
        }
    }

    return 0;
}
Code #2
#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char ch, prev;
    int c;
  
    c = prev = 0;
    while ((ch = getchar()) != EOF)
    {
        if (isalpha(prev) && !isalpha(ch))
            c++;
        prev = ch;
        if (ch == '\n')
        {
            printf("%d\n", c);
            c = prev = 0;
        }
    }

    return 0;
}

沒有留言:

張貼留言