L1-023 输出GPLT
分数 20
全屏浏览题目
切换布局
作者 陈越
单位 浙江大学
给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....
这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT
的顺序打印,直到所有字符都被输出。
输入格式:
输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
pcTclnGloRgLrtLhgljkLhGFauPewSKgt
输出样例:
GPLTGPLTGLTGLGLL
题目分析和代码:
没有用什么特别的算法 纯傻瓜式方法
小白分析一下:
1.定义一个sum数组来装GPLT每个字母的个数;
2.定义两个字符串分别装字母和输进去的字符串;
3.利用for循环和strlen()来统计每个字母的个数;
4.利用while循环+一个嵌套的for循环对四个字母循环输出
5.每输出一次,对应的sum[i]就减一个字母个数,直至全部为0就结束循环
代码如下
#include <stdio.h>
#include <string.h>
int main() {
int sum[4]={0},i;//sum用来统计GPLT各个的个数
char b[5]={'G','P','L','T'};
char a[10001];
scanf("%s",a);
for(i=0;i<strlen(a);i++){
if(a[i]=='g'||a[i]=='G'){
sum[0]++;}
if(a[i]=='p'||a[i]=='P'){
sum[1]++;}
if(a[i]=='l'||a[i]=='L'){
sum[2]++;}
if(a[i]=='t'||a[i]=='T'){
sum[3]++;}
}
while(1){
for(i=0;i<4;i++){//对四个字母循环啊循环
if(sum[i]!=0){//只要里面还有 就打印
printf("%c",b[i]);
sum[i]--;//每打印完一个就减一个
}}
if(sum[0]==0&&sum[1]==0&&sum[2]==0&&sum[3]==0)//全部都清零了就结束循环
break;
}
return 0;
}