首页 > 编程语言 >PTA-团体程序设计天梯赛 L1-023 输出GPLT(20分)

PTA-团体程序设计天梯赛 L1-023 输出GPLT(20分)

时间:2024-11-21 21:42:45浏览次数:3  
标签:输出 顺序 20 字符 map PTA while GPLT

L1-023 输出GPLT

分数 20

题目描述:给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。

输入格式:

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

输出格式:

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

输入样例:

pcTclnGloRgLrtLhgljkLhGFauPewSKgt

输出样例:

GPLTGPLTGLTGLGLL

思路分析:

使用一个 计数器 + 按顺序输出 的思想。具体来说,程序依赖于 map 数据结构来跟踪输入字符的数量,并利用 while 循环和 for 循环的组合确保按指定的顺序输出字符。逻辑的核心思想是:

  1. 统计字符出现次数:使用 map 统计输入字符的频次。
  2. 按顺序输出特定字符:通过顺序遍历 'G''P''L''T',确保按要求的顺序输出字符。
  3. 防止重复输出:通过减少字符计数来防止字符被多次输出。

先给出代码示例

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

char x,y[]={'G','P','L','T'};
map<char,int>m;
int main()
{
    while(cin >> x) m[toupper(x)]++;

    while (m['G']+m['P']+m['L']+m['T'])
    {
        for (int i = 0;i < 4;i++)
            if (m[y[i]])
            {
                cout << y[i];
                m[y[i]]--;
            }
    }
    return 0;
}

首先读取一行字符串,可以在输入的同时直接对GPLT进行计数  。为此我们在开头就规定了一个map<char,int>;键为字符,值为整数(出现次数)。

 while (cin>>x) m[toupper(x)]++;

只要还有四个字母的任意一个存在就继续打印输出

while (m['G'] || m['P'] || m['L'] || m['T'])//当还有四个字母中任意一个存在时

后续根据先前统计过的计数器m ,按照GPLT进行打印输出

for (int i=0;i<4;i++) {
            if(m[y[i]]) {
                cout<<y[i];
                m[y[i]]--;//通过减少字符计数来防止字符被多次输出。
            } 
        }

成功拿到20分!

总结:

这段代码的核心思想是统计并按顺序输出特定字符。它首先统计字符的出现次数,然后按特定的顺序输出字符,直到所有字符的计数变为 0。它使用 map 来存储字符及其计数,并使用 while 和 for 循环来控制输出顺序和避免重复输出。

 

标签:输出,顺序,20,字符,map,PTA,while,GPLT
From: https://blog.csdn.net/m0_54750154/article/details/143823253

相关文章

  • 『模拟赛』多校A层冲刺NOIP2024模拟赛25
    Rank极限了,感觉还行感觉T3不是一般人可做的,遂先来写赛记。A.图签。本来不是很一眼的,但看到给了这个和这个然后就很一眼了。用longlong状压每个点所有操作下是否属于S/T集合的状态,那么发现对于一条边\((i,j)\),只有某一次操作满足\(i\inS\)且\(j\inT\)......
  • 2024.11.21模拟赛
    今天照常七点半左右到学校,结果入门发现氛围不对。打开手机,发现题目压缩包已经发了,我当时就是一个问号。(一定是刚开始耽误的几分钟耽误我写T2了!!!)然后就开始写题。这套题的难度对于我还好,不会出现打完暴力只能摆烂的情况。(但出现了先摆烂然后疯狂打暴力的情况)T1第一眼看着花......
  • 【题解】AT_joisc2007_mall ショッピングモール (Mall)
    原题传送门温馨提示:岛国题要换行!需要求一个矩阵的和,考虑二维前缀和。题目中不允许矩阵中有负数,结合求和的最小值,我们把负数赋为最大值不就行了吗。接下来就是求二维前缀和了。基于容斥原理,二维前缀和有如下递推关系:\[sum_{i,j}=sum_{i-1,j}+sum_{i,j-1}-sum_{i-1,j-1}+c_{i......
  • [2024-11-21极客大挑战CTFPlus]Crypto练手
    三叶草安全技术小组第十五届极客大挑战CTFPlushttps://geek-syclover.play.ctfplus.cn/crypto的21题做出来11个,反正就是仍需努力今天官方wp出来,先发一下自己做的Crypto凯撒加密YEI{CKRIUSK_ZU_2024_MKKQ_INGRRKTMK}凯撒加密,flag前缀为SYC{xx}Y到S是一个偏移......
  • 2024/11/20日 日志 关于 Filter & Listener
    Filter点击查看代码--Filter----·概念:Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一--·过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。--·过滤器一般完成一些通用的操作,比如:权限控制、统一编码处理、敏感字符处理等等----......
  • gscoolink:gsv2001的sdk移植
    1前言  以gsv的sdk的应用代码为例,将应用代码从m0核移植到m1核的mcu上;  因为用的是hal库,所以互相移植修改的并不多;实际改个头文件就可以编译了;  虽然我hal库用的是m1核的hal库,但是实际上我直接啥也没改,跑在m4核的gdf303上也没啥问题;2修改项目名  修改.uprojx的名字,......
  • 2024最新版Node.js详细安装教程(含npm配置淘宝最新镜像地址)
    一:Node.js安装浏览器中搜索Nodejs,或直接用网址:Node.js—在任何地方运行JavaScript建议此处下载长期支持版本(红框内):开始下载,完成后打开文件:进入安装界面,在此处勾选,再点击next:此处为你希望将Nodejs安装到哪里,可以是默认的,也可以自定义,前提是要明确安装到哪里。这里不......
  • [2024.11.21]IOI 赛制练习赛
    我爱IOI赛时虽然小L说题目按照字典序排列,但是我还是决定先看T1。由于是图论专场,所以我直接大胆对数据连边,然后胡了一个并查集,感觉很对。但发现不太好维护当前状态如何插入新值,简单画了一会发现只需要维护一个\(vis\)数组并放到祖先那里,就可以维护能否操作了。单身时间......
  • P7906 [Ynoi2005] rpxleqxq 题解
    P7906[Ynoi2005]rpxleqxq题解题目大意给定一个长度为\(n\)的序列\(A\),和一个常数\(k\)。有\(m\)次询问,每次给定一个区间\([l,r]\),询问有多少二元组\((i,j)\),满足:\(1\leqi<j\leqn\);\((A_i\oplusA_j)\leqk\)。Solve前置知识:莫队二次离线。对于普通莫队,端......
  • [CSP-S2019]Emiya 家今天的饭 题解
    题意分析给出一个矩阵,要求每行只能选一个节点,每列选的节点不能超过所有选的节点的一半,不能不选,给出每个节点的选择方案数,求总方案数考场思路考虑暴力枚举每一个点的选择情况,最后统计答案。对于行:但是因为有每一行只能选择一个的限制,所以考虑当前行选择一个后直接转跳到下一行......