题目1006:ZOJ问题

Posted zsychanpin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题目1006:ZOJ问题相关的知识,希望对你有一定的参考价值。

题目描写叙述:
对给定的字符串(仅仅包括‘z‘,‘o‘,‘j‘三种字符),推断他能否AC。

是否AC的规则例如以下:
1. zoj能AC。
2. 若字符串形式为xzojx,则也能AC,当中x能够是N个‘o‘ 或者为空;
3. 若azbjc 能AC。则azbojac也能AC,当中a,b,c为N个‘o‘或者为空。
输入:
输入包括多组測试用例。每行有一个仅仅包括‘z‘,‘o‘,‘j‘三种字符的字符串,字符串长度小于等于1000。
输出:
对于给定的字符串,假设能AC则请输出字符串“Accepted”。否则请输出“Wrong Answer”。
例子输入:
zoj
ozojo
ozoojoo
oozoojoooo
zooj
ozojo
oooozojo
zojoooo
例子输出:
Accepted
Accepted
Accepted
Accepted
Accepted
Accepted
Wrong Answer
Wrong Answer

#include <iostream>
#include <cstring>
#include <stdio.h>

using namespace std;

bool accept1(char str[])
{
    int i = 0;
    bool isZ = false;
    bool isO = false;
    bool isJ = false;
    while(str[i])
    {
        if(i == 0 && str[i] == ‘z‘)
            isZ = true;
        if(i == 1 && str[i] == ‘o‘)
            isO = true;
        if(i == 2 && str[i] == ‘j‘)
            isJ = true;
        i++;
    }
    if(isZ && isO && isJ && i == 3)
        return true;
    else
        return false;
}
//xzojx
bool accept2(char str[])
{
    int i = 2;
    bool flag = false;
    if(str[0] && str[1])
    {
        while(str[i])
        {
            if(str[i] == ‘j‘ && str[i - 1] == ‘o‘ && str[i - 2] == ‘z‘)
            {
                int cishu = i -2 ;
                bool is_equal = true;
                int j =0;
                for(; j < cishu; j++)
                {
                    if(str[j] == ‘o‘ && str[i+1+j] == ‘o‘)
                        continue;
                    else
                    {
                        is_equal = false;
                        break;
                    }
                }
                if(is_equal && !str[j+i+1])
                {
                    flag = true;
                    break;
                }
            }
            i++;
        }
    }
    return flag;

}
// azbojac  oozoojoooo
bool accept3(char str[])
{
    int i = 0;
    int a=0,b=0,c=0;
    int numZ =0,numJ=0;
    bool hasZ = false,hasO = false,hasJ = false;
    bool flag = false;

    while(str[i])
    {
        if(str[i] == ‘z‘ )
        {
            numZ++;
            hasZ = true;
        }
        if(str[i] == ‘j‘)
        {
            numJ++;
            hasJ = true;
        }

        if(!hasZ && str[i] == ‘o‘)
            a++;
        if(hasZ && !hasJ && str[i] == ‘o‘)
            b++;
        if(hasZ && hasJ && str[i] == ‘o‘)
            c++;
        i++;
    }
    if(numJ == 1 && numZ == 1)
    {
        if(2*a == c && b >= 1)
            flag = true;
    }

    return flag;

}
int main()
{

    char str[1000];
    //string str;
    while(scanf("%s",str) != EOF)
    {
        if(accept1(str) || accept2(str) || accept3(str))
        {
            printf("%s\n","Accepted");
        } else
        {
            printf("%s\n","Wrong Answer");
        }
    }
}



以上是关于题目1006:ZOJ问题的主要内容,如果未能解决你的问题,请参考以下文章

九度OJ 1006 ZOJ问题 (这题測试数据有问题)

1006.ZOJ问题

ZOJ1006 Do the Untwist

zoj 2006 Glass Beads

九度OJ—题目1032:ZOJ

1032.ZOJ问题