问题描述
1043 输出PATest (20 分)
给定一个长度不超过 104 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 PATestPATest… 这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到所有字符都被输出。
输入格式:
输入在一行中给出一个长度不超过 104 的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
redlesPayBestPATTopTeePHPereatitAPPT
输出样例:
PATestPATestPTetPTePePee
作者: CHEN, Yue
单位: 浙江大学
时间限制: 400 ms
内存限制: 64 MB
代码长度限制: 16 KB
#include <iostream>
#include <string>
#define N 10000
using namespace std;
int main()
{
string str;
cin>>str;
char s[N];
int i,j=0,k;
for(i=0;i<str.length();i++)
if(str[i]=='P'||str[i]=='A'||str[i]=='T'||str[i]=='e'||str[i]=='s'||str[i]=='t')
s[j++]=str[i];
int count[6]={0};
for(i=0;i<j;i++)
{
if(s[i]=='P')
count[0]++;
else if(s[i]=='A')
count[1]++;
else if(s[i]=='T')
count[2]++;
else if(s[i]=='e')
count[3]++;
else if(s[i]=='s')
count[4]++;
else
count[5]++;
}
int min=count[0],max=count[0];
int mini=0,maxi=0;
for(i=0;i<6;i++)
{
if(count[i]<min)
{
min=count[i];//字数最少的字母个数
mini=i;
}
if(count[i]>max)
{
max=count[i];
maxi=i;
}
}
for(i=0;i<min;i++)
cout<<"PATest";
while(max--)
{
if(count[0]-min)
{
cout<<'P';
count[0]--;
}
if(count[1]-min)
{
cout<<'A';
count[1]--;
}
if(count[2]-min)
{
cout<<'T';
count[2]--;
}
if(count[3]-min)
{
cout<<'e';
count[3]--;
}
if(count[4]-min)
{
cout<<'s';
count[4]--;
}
if(count[5]-min)
{
cout<<'t';
count[5]--;
}
}
return 0;
}
第一次做这道题时输出完整的PATest后对于剩下的字母不知道怎么解决了。。。。其实可以不用分为完整的和不完整的,可以按照他们的个数一个个的输出。很庆幸这次我没有自己放弃而是去搜答案,我自己做出来了。I Got It!