题目1006:ZOJ问题

    xiaoxiao2021-03-25  80

    时间限制: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; }
    转载请注明原文地址: https://ju.6miu.com/read-35386.html

    最新回复(0)