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;
    }

     

  • 相关阅读:
    Centos设置阿里云yum源
    十大排序算法之Java实现
    什么是DFS和BFS?
    计算机专业技能-Java专项练习
    Lamda 表达式
    JavaWeb实现分页的四种方法
    Linux 常用关机命令及其比较
    Chocolatey常用命令
    JAVA++:JAVA中try、catch、finally带return的执行顺序
    MySQL++:MySQL 多行数据合并 GROUP_CONCAT
  • 原文地址:https://www.cnblogs.com/staginner/p/2329151.html
Copyright © 2011-2022 走看看