题目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
自己写的代码如下:
看了一下别人的代码,逻辑简单明了。
代码如下:
题目描述:
对给定的字符串(只包含’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; }
相关文章推荐
- 题目1006:ZOJ问题
- 九度 题目1006:ZOJ问题
- 九度OJ 题目1006:ZOJ问题
- 题目1006:ZOJ问题
- 九度 oj 题目1006:ZOJ问题
- 题目1006:ZOJ问题
- 题目1006:ZOJ问题
- 九度oj 题目1006:ZOJ问题 【ZJU2010考研机试题2】【容易理解混乱】
- 题目1006:ZOJ问题(递推规律)
- 九度 题目1006:ZOJ问题
- 9度oj 题目1006:ZOJ问题【递推】
- 【九度】题目1006:ZOJ问题
- 题目1006:ZOJ问题
- 题目1006:ZOJ问题
- 题目1006:ZOJ问题
- 题目1006:ZOJ问题
- 九度OJ 1006 ZOJ问题
- 九度OJ--1006-ZOJ问题
- OJ_1006 ZOJ问题
- ZOJ问题(2010浙江大学研究生复试上机题目[找规律] hdoj 3788)