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

     

  • 相关阅读:
    分析ASP.NET读取XML文件4种方法
    WordPress 主题教程 #4a:Header 模板
    WordPress 主题教程 #4b:Header 模板 2
    倍受好评的美国主机JustHost使用全攻略教程
    单链表的创建、插入、删除、倒置操作
    WordPress 主题教程:从零开始制作 WordPress 主题
    google adsense 设置建议
    PHP:10个不常见却非常有用的PHP函数
    WordPress 主题教程 #2:模板文件和模板
    必须掌握的八个cmd命令行
  • 原文地址:https://www.cnblogs.com/staginner/p/2329151.html
Copyright © 2011-2022 走看看