首页 > 代码库 > 题目1006:ZOJ问题

题目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”。
样例输入:
zojozojoozoojoooozoojoooozoojozojooooozojozojoooo
样例输出:
AcceptedAcceptedAcceptedAcceptedAcceptedAcceptedWrong AnswerWrong Answer

-----------------------------------------------------

思路:

  • 首先判断输入是否正确,要满足1. 全是z、o、j ;2. z和j只能各有一个。
  • 在输入正确的情况下,z前面o的个数记为a,z和j之间o的个数记为b,j之后o的个数记为c,满足c=a×b,并且b!=0时Accepted

-----------------------------------------------------

 1  #include<stdio.h> 2 #include<string.h> 3 char l0[1001]; 4 int main(int argc, char const *argv[]) 5 { 6     int i,a,b,c; 7     int nz,nj; 8     int flag; 9     while(scanf("%s",l0)!=EOF)10     {11         nz=nj=flag=0;12         for(i=0;l0[i]!=\0;i++)13             {14                 if(l0[i]==z)15                 {16                     nz++;17                     a=i;18                 }19                 else if(l0[i]==j)20                 {21                     nj++;22                     b=i;23                 }24                 else if(l0[i]!=o)25                     flag=1;26                 else27                     continue;            }28         if(nz!=1||nj!=1||flag)//判断输入是否正确29             puts("Wrong Answer");30         else31         {32             c=strlen(l0)-b-1;b=b-a-1;//假定z在j前面33             if(c==a*b&&b!=0)//a等于c的b,并且b!=034                  puts("Accepted");35             else36                  puts("Wrong Answer");37         }38     }39     return 0;40 }

--------------------------------------------------------

小结:

  • 要求考虑到该考虑的所有情况
  • c++相对c编程更方便些