题目描述
给定一个长度不超过 104 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 PATestPATest.... 这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到所有字符都被输出。
输入描述
输入在一行中给出一个长度不超过 104 的、仅由英文字母构成的非空字符串。
输出描述
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入例子
redlesPayBestPATTopTeePHPereatitAPPT
输出例子
PATestPATestPTetPTePePee
我的代码
#include<stdio.h>
#include<string.h>
int main(){
char a[10001];
int b[7]={0},i,len,max;
scanf("%s",a);
len=strlen(a);
for(i=0;i<len;i++){
if(a[i]=='P'){
b[0]++;
}
if(a[i]=='A'){
b[1]++;
}
if(a[i]=='T'){
b[2]++;
}
if(a[i]=='e'){
b[3]++;
}
if(a[i]=='s'){
b[4]++;
}
if(a[i]=='t'){
b[5]++;
}
}
max=b[0];
for(i=0;i<6;i++){
if(b[i]>max){
max=b[i];
}
}
do{
if(b[0]!=0){
printf("P");
b[0]--;
}
if(b[1]!=0){
printf("A");
b[1]--;
}
if(b[2]!=0){
printf("T");
b[2]--;
}
if(b[3]!=0){
printf("e");
b[3]--;
}
if(b[4]!=0){
printf("s");
b[4]--;
}
if(b[5]!=0){
printf("t");
b[5]--;
}
max--;
}while(max!=0);
return 0;
}
我的分析
这道题在开始的时候稍微花了一点时间。我的思路是先统计输入的字符串中PATest每个字母分别有多少个,找出其中次数最多的赋值给max,然后do-while循环开始按照顺序输出,每输出一次则相应的次数就要减一次,每循环完一次max就要减一次,循环一直到max=0为止。
网友评论