您的位置:首页 > 其它

题目1006:ZOJ问题

2017-03-12 16:53 351 查看
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:21903 解决:3900

题目描述:

对给定的字符串(只包含’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

来源:

2010年浙江大学计算机及软件工程研究生机试真题

答疑:

解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-7730-1-1.html

判断逻辑有二个:

统计’z’前o的个数为a, ‘z’和’j’之间o的个数为b, ‘j’之后的o的个数为c.

(1)b!=0(之前我用(a+b+c)!=0来判断,所以会一直通不过)

(2)c=a*b

自己写的代码如下:

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string str;
int n;
while(cin>>str)
{
int flag=0; //用来判断是否为合法的输入
int z1=0;//z的个数
int j1=0;//j的个数
int a=0;//统计'z'前o的个数为a, 'z'和'j'之间o的个数为b, 'j'之后的o的个数为c
int b=0;
int c=0;
n=str.length();
int i;
for(i=0;i<n;i++)
{
if(str[i]!='z')
{
if(str[i]=='j')
{
if(z1==0)//j出现在z之前
{
flag=1;
break;
}
else
{
j1++;
if(j1>1) //j大于一个
{
flag=1;
break;
}
b=i-1-a;
}
}
}
else if(str[i]=='z')
{
z1++;
if(z1>1)//如果z大于二个
{
flag=1;
break;
}
a=i;
}
}
if(flag==1)
cout<<"Wrong Answer"<<endl;
else
if((j1==0 || z1==0) && flag==0)//没有j或者z
cout<<"Wrong Answer"<<endl;
else if(flag==0 && b!=0)
{
c=n-a-b-2;
if(c==a*b)
cout<<"Accepted"<<endl;
else
cout<<"Wrong Answer"<<endl;
}else if(b==0 && flag==0)
cout<<"Wrong Answer"<<endl;
}
return 0;
}


看了一下别人的代码,逻辑简单明了。

代码如下:

#include <iostream>
#include <string>

using namespace std;

int main()
{
string str;

while (cin >> str)
{
int z_index=-1, j_index=-1;
bool more_than_one_z_or_j = false;
for (size_t i = 0; i < str.size(); ++ i)
{
if (str[i]=='z' && z_index==-1)
{
z_index = i;
} else if (str[i]=='j' && j_index==-1)
{
j_index = i;
} else if (str[i] != 'o')
{
more_than_one_z_or_j = true;
break;
}
}
if (more_than_one_z_or_j == false
&& z_index != -1
&& j_index != -1
&& z_index + 1 < j_index
&& z_index*(j_index-z_index-1) == (str.size()-1-j_index))
{
cout << "Accepted" << endl;
} else
{
cout << "Wrong Answer" << endl;
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: