单词数
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 26054 Accepted Submission(s): 6094
Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend #
Sample Output
4
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
char str[10000], a[1000][100];
while(gets(str) && str[0] != '#')
{
int i, j, sum = 0, k, d = 0;
memset(a, '\0', sizeof(a));
for(i = 0, j = 0, k = 0; str[i] != '\0'; i++)
{
if(str[i] != ' ')
{
a[j][k++] = str[i];
d = 1;
}
else
{
if(str[i + 1] == ' ') continue;
if(str[i + 1] == '\0') break;
else k = 0, j++;
}
}
for(i = 0; i < j; i++) {
int point = 0;
for(k = i + 1; k <= j; k++)
if(strcmp(a[i], a[k]) == 0)
{
point = 1;
break;
}
if(point == 0)
sum += 1;
}
printf("%d\n", d ? sum + 1 : sum);
}
return 0;
}
这道题我用这样的代码居然过了……我自己在测试的时候,在单词前面加空格进行测试(即第一个字符为空格),超过两个单词则wrong answer,但是提交到OJ居然不会报错……还有,在while里面判断'#'字符的出现貌似并不符合“遇到#时表示输入结束 ”这样的说法,所以我又改了一下。
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
char str[10000], a[1000][100];
while(gets(str))
{
int i, j, sum = 0, k, d = 0;
memset(a, '\0', sizeof(a));
for(i = 0; str[i] == ' '; i++); //去掉字符串前多余的空格
for(j = 0, k = 0; str[i] != '\0'; i++)
{
if(str[i] == '#') return 0; //遇到#退出
if(str[i] != ' ')
{
a[j][k++] = str[i];
d = 1;
}
else
{
if(str[i + 1] == ' ') continue;
if(str[i + 1] == '\0') break;
else k = 0, j++;
}
}
for(i = 0; i < j; i++)
{
int point = 0;
for(k = i + 1; k <= j; k++)
if(strcmp(a[i], a[k]) == 0)
{
point = 1;
break;
}
if(point == 0)
sum += 1;
}
printf("%d\n", d ? sum + 1 : sum);
}
return 0;
}
我自己修改了一下,虽然上面的代码是可以过的,但是还是感觉强迫症要犯……
over 万事大吉 AC