HDOJ2072单词数 解题报告

单词数

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值