以
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;
}
沒有留言:
張貼留言