1006 zoj

来源:互联网 发布:小成图排盘软件 编辑:程序博客网 时间:2024/05/16 05:48
//1 z,j只能出现一次并且z只能出现在j前面
//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;
        }
}

0 0
原创粉丝点击