7-6 输出GPLT
分数 20
全屏浏览题目
作者 陈越单位 浙江大学
给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。
输入格式:
输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
pcTclnGloRgLrtLhgljkLhGFauPewSKgt
输出样例:
GPLTGPLTGLTGLGLL
思路:
用数组来计数,遍历字符串,因为不区分大小写 所以比如存在'G或者‘g’,‘G’的个数就++。
GPLT组成的字符串最长也就是源字符串的长度,然后我们就在循环里按照GPLT的顺序写if语句,如果存在就输出,并且个数--。如果这个字母不存在了就不会执行对应的if语句,按照顺序接着输出剩下的。因此实现了“四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。”
AC:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
int a[4]={0};
for(int i=0;i<s.length();i++)
{
if(s[i]=='G'||s[i]=='g') a[0]++;
if(s[i]=='P'||s[i]=='p') a[1]++;
if(s[i]=='L'||s[i]=='l') a[2]++;
if(s[i]=='T'||s[i]=='t') a[3]++;
}
for(int i=0;i<s.length();i++)
{
if(a[0]){ cout<<"G";a[0]--;}
if(a[1]) {cout<<"P";a[1]--;}
if(a[2]) {cout<<"L";a[2]--;}
if(a[3]) {cout<<"T";a[3]--;}
}
}
1108 String复读机
扫描二维码关注公众号,回复:
15235368 查看本文章
分数 20
全屏浏览题目
切换布局
作者 陈越单位 浙江大学
给定一个长度不超过 104 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 StringString.... (注意区分大小写)这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 String 的顺序打印,直到所有字符都被输出。例如 gnirtSSs 要调整成 StringS 输出,其中 s 是多余字符被忽略。
输入格式:
输入在一行中给出一个长度不超过 104 的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
sTRidlinSayBingStrropriiSHSiRiagIgtSSr
输出样例:
StringStringSrigSriSiSii
思路:
这个题和上面题类似,不同的是区分大小写了。
AC:
#include<bits/stdc++.h>
using namespace std;
vector<char> v;
int main()
{
string c;
cin>>c;
int cnt1=0,cnt2=0,cnt3=0,cnt4=0,cnt5=0,cnt6=0;
for(int i=0;i<c.length();i++)
{
if(c[i]=='S') cnt1++;
if(c[i]=='t') cnt2++;
if(c[i]=='r') cnt3++;
if(c[i]=='i') cnt4++;
if(c[i]=='n') cnt5++;
if(c[i]=='g') cnt6++;
}
for(int i=0;i<c.length();i++)
{
if(cnt1){cout<<'S';cnt1--;}
if(cnt2){cout<<'t';cnt2--;}
if(cnt3){cout<<'r';cnt3--;}
if(cnt4){cout<<'i';cnt4--;}
if(cnt5){cout<<'n';cnt5--;}
if(cnt6){cout<<'g';cnt6--;}
}
}