PAT Basic Level 1043 输出PATest

题目链接:

https://pintia.cn/problem-sets/994805260223102976/problems/994805280074743808

AC代码:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string>
#include <vector>
#include <string.h>
using namespace std;

int main(){
    string s;
    cin>>s;
    int P_cnt=0,A_cnt=0,T_cnt=0,e_cnt=0,s_cnt=0,t_cnt=0;
    for(int i=0;i<s.size();i++){
        if(s[i]=='P')
            P_cnt++;
        else if(s[i]=='A')
            A_cnt++;
        else if(s[i]=='T')
            T_cnt++;
        else if(s[i]=='e')
            e_cnt++;
        else if(s[i]=='s')
            s_cnt++;
        else if(s[i]=='t')
            t_cnt++;
        else continue;
    }

    while(P_cnt!=0||A_cnt!=0||T_cnt!=0||e_cnt!=0||s_cnt!=0||t_cnt!=0){
        while(P_cnt!=0&&A_cnt!=0&&T_cnt!=0&&e_cnt!=0&&s_cnt!=0&&t_cnt!=0)
        {
            cout<<"PATest";
            P_cnt--,A_cnt--,T_cnt--,e_cnt--,s_cnt--,t_cnt--;
        }
        if(P_cnt!=0){
            cout<<"P";
            P_cnt--;
        }
        if(A_cnt!=0){
            cout<<"A";
            A_cnt--;
        }
        if(T_cnt!=0){
            cout<<"T";
            T_cnt--;
        }
        if(e_cnt!=0){
            cout<<"e";
            e_cnt--;
        }
        if(s_cnt!=0){
            cout<<"s";
            s_cnt--;
        }
        if(t_cnt!=0){
            cout<<"t";
            t_cnt--;
        }
    }
}

二刷:

#include <iostream>
#include <cstdio>
#include <string>
#include <map>
using namespace std;

int main(){
    string str;
    getline(cin,str);
    int PNum=0,ANum=0,TNum=0,eNum=0,sNum=0,tNum=0;
    int len=str.size();
    for(int i=0;i<len;i++){
        if(str[i]=='P')
            PNum++;
        else if(str[i]=='A')
            ANum++;
        else if(str[i]=='T')
            TNum++;
        else if(str[i]=='e')
            eNum++;
        else if(str[i]=='s')
            sNum++;
        else if(str[i]=='t')
            tNum++;
    }
    while(PNum||ANum||TNum||eNum||sNum||tNum){
        if(PNum){
            printf("P");
            PNum--;
        }
        if(ANum){
            printf("A");
            ANum--;
        }
        if(TNum){
            printf("T");
            TNum--;
        }
        if(eNum){
            printf("e");
            eNum--;
        }
        if(sNum){
            printf("s");
            sNum--;
        }
        if(tNum){
            printf("t");
            tNum--;
        }
    }
}

二刷(参考别人的代码,二刷目的是发现的新的解法,由于我的方法出现重复,所以,借鉴了别人的解法):

思路:利用hash散列,

#include <iostream>
#include <cstdio>
#include <string>
#include <map>
using namespace std;

int main(){
    string str;
    getline(cin,str);
    int mpp[128]={0};
    int len=str.size();
    for(int i=0;i<len;i++){
        mpp[str[i]]++;
    }
    while(mpp['P']>0||mpp['A']>0||mpp['T']>0||mpp['e']>0||mpp['s']>0||mpp['t']>0){
        if((mpp['P']--)>0)printf("P");
        if((mpp['A']--)>0)printf("A");
        if((mpp['T']--)>0)printf("T");
        if((mpp['e']--)>0)printf("e");
        if((mpp['s']--)>0)printf("s");
        if((mpp['t']--)>0)printf("t");
    }
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值