您的位置:首页 > 其它

HDOJ2072单词数 解题报告

2014-05-10 21:12 579 查看


单词数

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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: