zoukankan      html  css  js  c++  java
  • HNU 10076 Jimmy's Riddles

    HNU_10076

        这个和POJ的3332十分类似,都是判断一个字符串是否合法,具体怎么想可以参考一下我的另一篇题解,http://www.cnblogs.com/staginner/archive/2012/01/24/2329131.html,代码为了看起来思路清晰一些,所以写得就十分啰嗦了,很多地方是可以简化的。

    #include<stdio.h>
    #include<string.h>
    #define MAXD 10010
    char noun[][10] = {"tom", "jerry", "goofy", "mickey", "jimmy", "dog", "cat", "mouse"};
    char verb[][10] = {"hate", "love", "know", "like", "hates", "loves", "knows", "likes"};
    char b[MAXD], word[MAXD];
    int pat;
    void delword(int &i)
    {
    while(b[i] && b[i] != ' ')
    ++ i;
    }
    void delblank(int &i)
    {
    while(b[i] == ' ')
    ++ i;
    }
    int find_article()
    {
    if(strcmp(word, "a") == 0 || strcmp(word, "the") == 0)
    return 1;
    return 0;
    }
    int find_noun()
    {
    int i;
    for(i = 0; i < 8; i ++)
    if(strcmp(noun[i], word) == 0)
    return 1;
    return 0;
    }
    int find_verb()
    {
    int i;
    for(i = 0; i < 8; i ++)
    if(strcmp(verb[i], word) == 0)
    return 1;
    return 0;
    }
    void pattern()
    {
    if(pat == 0)
    {
    if(find_article())
    pat = 1;
    else
    pat = 2;
    }
    else if(pat == 1)
    {
    pat = 2;
    }
    else if(pat == 2)
    {
    if(strcmp(word, "and") == 0)
    pat = 3;
    else
    pat = 4;
    }
    else if(pat == 3)
    {
    if(find_article())
    pat = 1;
    else
    pat = 2;
    }
    else if(pat == 4)
    {
    if(find_article())
    pat = 5;
    else
    pat = 6;
    }
    else if(pat == 5)
    {
    pat = 6;
    }
    else if(pat == 6)
    {
    if(strcmp(word, "and") == 0)
    pat = 7;
    else
    pat = 0;
    }
    else if(pat == 7)
    {
    if(find_article())
    pat = 5;
    else
    pat = 6;
    }
    }
    int check()
    {
    if(pat == 0)
    {
    if(strcmp(word, ",") == 0)
    return 1;
    else
    return 0;
    }
    else if(pat == 1)
    {
    if(find_article())
    return 1;
    else
    return 0;
    }
    else if(pat == 2)
    {
    if(find_noun())
    return 1;
    else
    return 0;
    }
    else if(pat == 3)
    {
    if(strcmp(word, "and") == 0)
    return 1;
    else
    return 0;
    }
    else if(pat == 4)
    {
    if(find_verb())
    return 1;
    else
    return 0;
    }
    else if(pat == 5)
    {
    if(find_article())
    return 1;
    else
    return 0;
    }
    else if(pat == 6)
    {
    if(find_noun())
    return 1;
    else
    return 0;
    }
    else if(pat == 7)
    {
    if(strcmp(word, "and") == 0)
    return 1;
    else
    return 0;
    }
    return 0;
    }
    int solve()
    {
    int i, j, k;
    gets(b);
    pat = 0;
    for(i = 0, delblank(i); b[i];)
    {
    sscanf(b + i, "%s", word);
    pattern();
    if(!check())
    return 0;
    delword(i);
    delblank(i);
    }
    if(pat == 6)
    return 1;
    else
    return 0;
    }
    int main()
    {
    int t;
    gets(b);
    sscanf(b, "%d", &t);
    while(t --)
    {
    if(solve())
    printf("YES I WILL\n");
    else
    printf("NO I WON'T\n");
    }
    return 0;
    }

     

  • 相关阅读:
    CSS知识点总结[部分]
    前端知识日常总结
    上传第三方jar包到nexus
    maven命令
    mac安装并配置nexus3.5.1版本
    前端解决跨域问题
    Package.json 属性说明
    nodejs日常总结
    log4j.properties总结
    Spring整合Hibernate
  • 原文地址:https://www.cnblogs.com/staginner/p/2329151.html
Copyright © 2011-2022 走看看