1032: ZOJ
时间限制: 1Sec
内存限制: 32 MB
提交:162
解决: 102
题目描述
读入一个字符串,字符串中包含ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出,当某个字符用完时,剩下的仍然按照ZOJ的顺序输出。
输入
题目包含多组用例,每组用例占一行,包含ZOJ三个字符,当输入“E”时表示输入结束。
1<=length<=100。
输出
对于每组输入,请输出一行,表示按照要求处理后的字符串。
具体可见样例。
样例输入
ZZOOOJJJ
ZZZZOOOOOJJJ
ZOOOJJ
E
样例输出
ZOJZOJOJ
ZOJZOJZOJZOO
ZOJOJO
提示
来源
2009年浙江大学计算机及软件工程研究生机试真题
#include <iostream>
#include <string>
using namespace std;
char min_size(int size_z,int size_o,int size_j);
int main()
{
string str;
int length;
while(cin>>str)
{
if(str =="E")
break;
string str_z,str_o,str_j;
int size_z,size_o,size_j;
size_z=size_o=size_j = 0;
length = str.size();
int i;
for(i=0;i<length;i++)
{
if(str[i] =='Z')
{
str_z+=str[i];
}
elseif(str[i] == 'O')
{
str_o+=str[i];
}
else
{
str_j+=str[i];
}
}
size_z = str_z.size();
size_o = str_o.size();
size_j = str_j.size();
int n ,index;
switch(min_size(size_z,size_o,size_j))
{
case 'Z':
{
n=size_z;
break;
}
case 'O':
{
n= size_o;
break;
}
case 'J':
{
n= size_j;
break;
}
default:
break;
}
for(index=0;index<n;index++)
{
cout<<str_z[index]<<str_o[index]<<str_j[index];
}
while(index <size_z || index < size_o || index <size_j)
{
if(index<size_z)
cout<<str_z[index];
if(index<size_o)
cout<<str_o[index];
if(index<size_j)
cout<<str_j[index];
index++;
}
cout<<endl;
}
//cin>>str;
//cout<<str<<endl;
return 0;
}
char min_size(int size_z,int size_o,int size_j)
{
int tem;
char flag ;
if(size_z <size_o)
{
tem = size_z;
flag = 'z';
}
else
{
tem = size_o;
flag = 'o';
}
if(size_j < tem)
return 'J';
else
{
if(flag == 'z')
return'Z';
else
return'O';
}
}