【PTA-乙级】1003-我要通过(手动感叹号)
前言: 说真的 这个题我连题目都读不懂 我不知道具体原因是什么 可能是语文不好 可能是理解能力不行 此文章是看了别的大佬解题过程之后才写出来的 我觉得很有必要总结一下 -----分界线---- 补充: 在我写完这个题的代码之后 仍然觉得这个题的表述有问题 也就是这个题实现之后的条件 和题目给出的条件是不太一样的 算了 重点是学习其中有价值的东西
题目:
代码如下:
#include<iostream>
using namespace std;#include<cstring>int main()
{int x = 0;cin >> x; //输入的字符串个数while (x--) //8 87654321 x是几 进去几次{int key = 0;int Afront = 0, Amiddle = 0, Alater = 0; //state记录PAT 关键字 后面依次为前面 中间 后面的A的个数int i = 0;char arr[100];cin >> arr;for (i = 0; i < strlen(arr); i++){// AAAPAAAATAAAAAAAAif (arr[i] != 'P' && arr[i] != 'A' && arr[i] != 'T')break;if (arr[i] == 'P'){if (key == 0) //为什么是0就加 不是零就跳呢? 因为整个字符串只能有一个P 如果不是0 就代表出现过P了 就不对了key = 1;elsebreak;}if (arr[i] == 'A'){if (key == 1)key = 2;else if (key == 0)Afront++;else if (key == 2)Amiddle++;else if (key == 3)Alater++;elsebreak;}if (arr[i] == 'T')if (key == 2)key = 3;elsebreak;}// 中间 多出了几个A 后面就要有几个前面的while (Amiddle--){Alater -= Afront;}if (key != 3 || i != strlen(arr) || Afront != Alater)cout << "NO\n";elsecout << "YES\n";}return 0;
}
就以上面我的这个代码为例讲解吧 先说一下通过的条件:
1. 字符串仅有PAT三种字符组成 有其他的就是NO
2. 如果中间仅仅是PAT 则T后面与P前面必须有相同个数个A 即 AAPATAA AAAPATAAA 或者是PAT = = 等等
3. aPATa的基础上 中间每多一个A 后面就要多出一个前面的a
关于这个题的通过条件 读者可以多阅读阅读其他有关文章 感觉这个题是真的难分析
某讲解此文章下方的评论
下面说一说我觉得有意义的点:
1. 当你想输入未定数字条字符串 (这个条数是自己输入的) 那么可以用上面的方法 即 while(x--) 这样你可以直接输入10条字符串 后面的字符串都会放在缓冲区中 然后逐条进行判断
2. 输入某字符数组arr后 可以用strlen函数计算有效字符个数 再用for循环即可对每一位字符进行判断
3. 补充一点 计算string类型对象的字符个数用 a.size() 即可 (不可有空格,空格即中断)
4. 关于上方1003题的具体算法 就得对题目有较深的理解了 之后才能写出对应代码: 核心就是 分别判断P T 的前中后A的个数 然后进行判断
【PTA-乙级】1003-我要通过(手动感叹号)相关推荐
- C++学习之路 | PTA乙级—— 1003 我要通过! (20分)(精简)
1003 我要通过! (20分) "答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的"答案正确"大派送 -- 只要读入的字符串满足下列条件, ...
- 牛客网 PTA乙级真题 1003 数素数
数素数 (20) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 令Pi表示第i个素数.现任给两个正整数M &l ...
- PTA 乙级难点(全部)
PTA 乙级难点题目列表 1002 写出这个数(字符串) 1003 我要通过! 1004 成绩排名 1005 继续(3n+1)猜想 1008 数组元素循环右移问题 1009 说反话 1010 一元多项 ...
- PTA乙级题解(110题全)
First of all 如果你是你们学校的ACM选手 那么我猜你的目标可能是下面几个吧(^v^) (1) ACM区域赛拿牌 (2) PTA顶级(Top Level) (3) CCF-CSP认证400 ...
- PAT乙级 1003 我要通过! (20分)
PAT乙级练习总结 PAT乙级 1003 我要通过! (20分) 第二版有注释,希望我的思路可以帮助你. 文章目录 PAT乙级练习总结 一.1003题目 二.第一版只过了三个点 三.第二版 1003 ...
- PTA乙级1014(python3)
PTA乙级1014(python3) 题目信息: 大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&a ...
- 【PTA乙级练习题】topic:1001
[PTA乙级练习题]topic:1001 题目 审题 代码 知识点 总结 题目 1001 害死人不偿命的(3n+1)猜想 (15 分) 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇 ...
- PTA乙级1028 人口普查
PTA乙级 人口普查 1028 题目 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过 ...
- PTA 乙级 在霍格沃茨找零钱(c++)
PTA 乙级 在霍格沃茨找零钱(c++) 题目描述 如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 -- 就如海格告诉哈利的:"十七个银西可(Sickle)兑一个加隆(Galleo ...
- PTA 乙级 【1008】 数组元素循环右移问题
PTA 乙级 [1008] 数组元素循环右移问题 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置(最后M个数循环移至最前面的M个位置).如果 ...
最新文章
- Mybatis联合查询
- C#学习路线:C#入门经典 -> CLR VIA C# -> WINDOWS核心编程
- 【转】系统管理类DOS命令汇总
- OPA Quality Report in Jenkins Ben - 到哪里能看到我们的OPA Test在Jenkins Server上运行的情况
- 剑指Offer - 面试题57 - II. 和为s的连续正数序列(滑动窗口)
- (软件工程复习核心重点)第二章可行性研究-第三节:数据流图
- springBoot+mybaits+达梦数据库
- SAP License:烟草行业ERP选型
- 基于算法的建模--小结
- Q123:PBRT-V3,各种形式的“光传播方程”的推导依据
- enumerate取下标
- 期待人工智能在合作时的表现
- 你的爬虫是否徘徊在违法的边缘?
- Android Studio主导Unity打包方式的安卓打包
- 程序员的IDE到底是浅色主题好还是深色主题好?
- 产品读书《从0到1:开启商业与未来的秘密》
- Luca Canali
- 数学建模 --- 层次分析法(AHP模型)
- 企业微信机器人自动消息发送webhook接入代码
- 递归求阶乘和--PTA