//2 第二组测试输入字符串包含其他字符(题目上说只有z,o,j,三种字符)
//3 首字母为z:那么不管中间有多少个o,只要最后只有1个j就结束的话,那么全部Accepted。
我的笨蛋解法:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
usingnamespace std;
intmain(intargc, char* argv[])
{
charstr[1024];
charstr1[1024];
inti,j,k=0;;
inttmp=0;
intflag=0;
intbeforez;//z前面有几位
intlocatej;//j在第几位
intgo=0;
intlength=0;
intprefg=0;
inttimez=0;
inttimej=0;
while(scanf("%s",str)!=EOF)
{
length = strlen(str);
flag=0;
timez=0;
timej=0;
prefg=0;
beforez=0;
locatej=0;
//1 z,j只能出现一次并且z只能出现在j前面
//2 第二组测试输入字符串包含其他字符(题目上说只有z,o,j,三种字符)
for(j=0;j<length;j++)
{
if(str[j]!='z'&&str[j]!='o'&&str[j]!='j') {prefg=1;break;}
if(str[j]=='z') {beforez=j;timez++;}
if(str[j]=='j') {locatej=j;timej++;}
}
if(beforez>locatej||prefg==1||timez!=1||timej!=1) {printf("Wrong Answer\n");continue;}
while(length>=3){
if(length==3){
if(strcmp(str,"zoj")==0) {printf("Accepted\n");flag=1;}
break;
}
if(length==4){
if(strcmp(str,"zooj")==0) {printf("Accepted\n");flag=1;}
break;
}
elseif(length>=5)
{
tmp=0;
k=0;
go=0;
if(str[0]=='z'&&str[length-1]=='j')
{
printf("Accepted\n");
flag=1;
break;
}
for(i=0;i<(length-3)/2;i++)
{
//cout<<"str["<<i<<"] = "<<str[i]<<" str["<<length-1-i<<"] = "<<str[length-1-i]<<endl;
if(str[i]==str[length-1-i])
{
tmp++;
}
}
if((tmp==(length-3)/2) && ((length-3)%2==0))
{
if(!(str[i]=='z'&& str[i+1]=='o'&& str[i+2]=='j'))
{
break;
}
printf("Accepted\n");
flag=1;
tmp=0;
break;
}
///
//第一个z前面有几位;j前面的o在第几位
for(j=0;j<length;j++)
{
if(go==0) str1[k]=str[j];
elseif(go==1) {str1[k]='o';//cout<<"K= "<<k<<endl;
}
if(str[j]=='z') beforez = j;
if(str[j]=='j')
{
locatej = j;
str1[k-1]='j';
//cout<<"str1["<<k-1<<"] = "<<str1[k-1]<<endl;
str1[j]='o';
//k++; //ooooozooojooooooo //16 9
j=j+beforez+1;
go=1;
}
k++;
//cout<<"Hello!\n"<<endl;
}
if((length-locatej)<beforez)
{
//cout<<"MEI XI LA!"<<endl;
break;
}
//printf("beforez= %d\n",beforez);
//printf("After zheng li!*********************\n");
//cout<<"length= "<<length<<" length-1-beforez = "<<length-1-beforez<<endl;
for(j=0;j<length-1-beforez;j++)
{
str[j]=str1[j];
//printf("%c",str1[j]);
}
length = length-1-beforez;
//cout<<"\nAfter length = "<<length<<endl;
}
}
//cout<<"FLAG= "<<flag<<endl;
if(flag==0)printf("Wrong Answer\n");
}
return0;
}
简洁方案:
首先的任务是判断z和j只出现一次,然后根据c=a*b并且b>0
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char ch[1000];
int a,b,c;
int i,j,k,m,n;
while(cin>>ch)
{
a=b=c=0;
m=n=0;
for(i=0;i<strlen(ch);i++)
{
if(ch[i]=='z')
m++;
else if(ch[i]=='j')
n++;
}
for(i=0;ch[i]!='z';i++)
a++;
for(j=i+1;ch[j]!='j';j++)
b++;
for(k=j+1;ch[k]!='\n'&&k<strlen(ch);k++)
c++;
if(a*b==c&&b>0&&m==1&&n==1)
cout<<"Accepted"<<endl;
else
cout<<"Wrong Answer"<<endl;
}
}