PTA 团队天梯赛题集L1-023
题目:输出GPLT (分数 20)
题目类型:字符串处理
题目内容:
给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....
这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写
)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT
的顺序打印,直到所有字符都被输出。
输入格式:
输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
pcTclnGloRgLrtLhgljkLhGFauPewSKgt
输出样例:
GPLTGPLTGLTGLGLL
解题思路:
统计四个字符的个数然后依次输出即可。
C++代码实现:
#include<iostream>
using namespace std;
int main()
{
string a;
cin>>a;
int x=0,y=0,z=0,w=0,max=0;
//x,y,z,w依次对应四个字母的统计个数
//max表示统计的四个字母中个数最多的那个字母的个数
//循环遍历字符串,统计字母的个数
for(int i=0;i<a.size();i++)
{
if(a[i]=='g' || a[i]=='G')
{
x++;
if(max<x) max=x;
}
else if(a[i]=='p' || a[i]=='P')
{
y++;
if(max<y) max=y;
}
else if(a[i]=='l' || a[i]=='L')
{
z++;
if(max<z) max=z;
}
else if(a[i]=='t' || a[i]=='T')
{
w++;
if(max<w) max=w;
}
}
//循环字母个数最多的次数,保证字母得以输出
//循环输出四个字母,没输出一个相应个数减1
for(int i=0;i<max;i++)
{
if(x>0)
{
cout<<"G";
x--;
}
if(y>0)
{
cout<<"P";
y--;
}
if(z>0)
{
cout<<"L";
z--;
}
if(w>0)
{
cout<<"T";
w--;
}
}
return 0;
}
提交结果:
总结:
本题主要考察的应该是字符串的统计,当然也可能考察其他的内容,但是字符串统计最为主要,总体难度不大。学会统计字符串长度以及对字符串内容进行处理即可。