刷题打卡 | PAT 乙级 1043 输出PATest

170 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

题目描述

给定一个长度不超过 104 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 PATestPATest.... 这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到所有字符都被输出。

输入格式:

输入在一行中给出一个长度不超过 104 的、仅由英文字母构成的非空字符串。

输出格式:

在一行中按题目要求输出排序后的字符串。题目保证输出非空。

输入样例:

redlesPayBestPATTopTeePHPereatitAPPT

输出样例:

PATestPATestPTetPTePePee

思路分析

这道题并不难,我是用简单的计数解决的
将一个输入字符串转化成处理输入的每个字符,然后对每个P、A、T、e、s、t 分别计数,统计总数,再逐个按次序输出
值得一提的是,我犯了一个很傻的错误,我竟然使用了一个if(P--), P大于0的情况下,后面的自减根本不会执行,因为判断P为真,就直接跳过了后面的--,也就是说相当于 if(P)。

AC代码

#include<iostream>
using namespace std;
int P,A,T,e,s,t;
int main()
{
    char c;
    while(cin>>c)
    {
        switch(c)
        {
            case 'P': P++;break;
            case 'A': A++;break;
            case 'T': T++;break;
            case 'e': e++;break;
            case 's': s++;break;
            case 't': t++;break;
        }
    }
    int n=P+A+T+e+s+t;
    while(n--)
    {
        if(P) cout<<'P',P--;
        if(A) cout<<'A',A--;
        if(T) cout<<'T',T--;
        if(e) cout<<'e',e--;
        if(s) cout<<'s',s--;
        if(t) cout<<'t',t--;
    }
    return 0;
}

总结

细节决定成败,基础还是不扎实呀
生命不息,码不停题,加油吧,少年!