题目链接(hdoj 2072):http://acm.hdu.edu.cn/showproblem.php?pid=2072
单词数
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 24204 Accepted Submission(s): 5741
Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend
#
Sample Output
4
虽然是水题一道,但是不知道怎么的一直wa,尽管试了很多数据都是正确的。后来换了个思路来数单词终于过了。。。
AC代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int cmp(const void *a, const void *b)
{
return strcmp((char *)a, (char *)b);
}
main()
{
char words[2000][1000], str[20000];
while(gets(str) && strcmp(str, "#"))
{
int count = 0, k = 0, sig = 0;
for(int i = 0; str[i]; i++)
{
if(str[i] == ' ')
sig++;
}
if(sig == strlen(str))
{
puts("0");
continue;
}
for(int i = 0; str[i]; i++)
{
if(str[i] != ' ')
words[count][k++] = str[i];
else
{
words[count][k] = '\0';
if(k != 0)
count++;
k = 0;
}
}
if(k != 0)
words[count++][k] = '\0';
qsort(words, count, sizeof(char) * 1000, cmp);
int result = 1;//wa:int result = 0
for(int i = 0; i < count - 1; i++)//wa:i < count这里可能越位了,也可能测试数据最多单词数是2000?哇嘎拉纳伊。。。哇嘎拉纳伊。。。
if(strcmp(words[i], words[i + 1]))
result++;
printf("%d\n", result);
}
}