您的位置:首页 > 其它

HDOJ 3783 ZOJ

2015-11-28 20:45 330 查看

Problem Description

读入一个字符串,字符串中包含ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出,当某个字符用完时,剩下的仍然按照ZOJ的顺序输出。

Input

题目包含多组用例,每组用例占一行,包含ZOJ三个字符,当输入“E”时表示输入结束。

1<=length<=100。

Output

对于每组输入,请输出一行,表示按照要求处理后的字符串。

具体可见样例。

Sample Input

ZZOOOJJJ
ZZZZOOOOOJJJ
ZOOOJJ
E


Sample Output

ZOJZOJOJ
ZOJZOJZOJZOO
ZOJOJO


本来以为这道题很难要分很多种情况,第一次写的直接超时。

后来发现相当简单只要把条件设好就行(手动再见)。

#include<stdio.h>
#include<string.h>
int main()
{
int n,i,t1,t2,t3;
char zm[1000];
while(scanf("%s",zm)&&zm[0]!='E')
{
t1=t2=t3=0;
n=strlen(zm);
for(i=0;i<n;i++)
{
if(zm[i]=='Z')
t1++;
if(zm[i]=='O')
t2++;
if(zm[i]=='J')
t3++;
}
while(t1||t2||t3)
{
if(t1!=0)
{
printf("Z");
t1--;
}
if(t2!=0)
{
printf("O");
t2--;
}
if(t3!=0)
{
printf("J");
t3--;
}
}
printf("\n");
}
return 0;
}


然后……把第一次写的贴出来展示一下我到底有多蠢。(血泪脸)

居然还写了130行(我的天哪.jpg)

#include<stdio.h>
#include<string.h>
char zm[10000],ch[10000];
int main()
{
int n,i,t1,t2,t3;
while(scanf("%s",zm)&&zm[0]!='E')
{
t1=t2=t3=0;
n=strlen(zm);
for(i=0;i<n;i++)
{
if(zm[i]=='Z')
t1++;
if(zm[i]=='O')
t2++;
if(zm[i]=='J')
t3++;
}
for(i=1;i<=n;)
{
ch[i]='Z';
ch[i+1]='O';
ch[i+2]='J';
t1--;
t2--;
t3--;
i+=3;
if(t1==0)
{
for(;i<=n;)
{
for(;i<=n;)
{
while(t2==0)
{
ch[i]='J';
i++;
t3--;
if(t3==0)
break;
}
while(t3==0)
{
ch[i]='O';
i++;
t2--;
if(t2==0)
break;
}
break;
}
ch[i]='O';
ch[i+1]='J';
t2--;
t3--;
i+=2;
}
break;
}
if(t2==0)
{
for(;i<=n;)
{
for(;i<=n;)
{
while(t1==0)
{
ch[i]='J';
i++;
t3--;
if(t3==0)
break;
}
while(t3==0)
{
ch[i]='Z';
i++;
t1--;
if(t1==0)
break;
}
break;
}
ch[i]='Z';
ch[i+1]='J';
t1--;
t3--;
i+=2;
}
break;
}
if(t3==0)
{
for(;i<=n;)
{
for(;i<=n;)
{
while(t2==0)
{
ch[i]='Z';
i++;
t1--;
if(t1==0)
break;
}
while(t1==0)
{
ch[i]='O';
i++;
t2--;
if(t2==0)
break;
}
break;
}
ch[i]='Z';
ch[i+1]='O';
t2--;
t1--;
i+=2;
}
break;
}
}
for(i=1;i<n;i++)
printf("%c",ch[i]);
printf("%c\n",ch[i]);
}
return 0;
}


能想得这么麻烦我真是个天才T皿T
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: