hdu 3783 ZOJ

来源:互联网 发布:ubuntu不支持exfat 编辑:程序博客网 时间:2024/05/22 09:40

Description

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

Input

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

Output

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

Sample Input

ZZOOOJJJZZZZOOOOOJJJZOOOJJE

Sample Output

ZOJZOJOJZOJZOJZOJZOOZOJOJO
解题思路:
     首先分别找出Z,O,J的个数x,y,z,求出三个数中的最大值t,然后将t个ZOJ放到字符串中,然后分别删去多余的Z,O,J即可。
代码:
#include<iostream>#include<stdio.h>#include<string.h>int max(int a,int b){return a>b?a:b;}using namespace std;int main(){char a[400];while(scanf("%s",a) && strcmp(a,"E")!=0){int i,x=0,y=0,z=0,t;for(i=0;a[i]!=0;i++){if(a[i]=='Z') x++;if(a[i]=='O') y++;if(a[i]=='J') z++;}        t=max(x,max(y,z));        for(i=0;i<3*t;i+=3)        {        if(x>0)        {        a[i]='Z';        x--;}        else a[i]='\0';        if(y>0)        {        a[i+1]='O';        y--;}        else a[i+1]='\0';        if(z>0)        {        a[i+2]='J';        z--;}        else a[i+2]='\0';}for(i=0;i<3*t;i++)    if(a[i]!='\0') cout<<a[i];        cout<<endl;}return 0;}

原创粉丝点击