PAT B1003 我要通过

2024-03-10 10:18
文章标签 pat 我要 b1003

本文主要是介绍PAT B1003 我要通过,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目介绍

1003 我要通过! (20 分)

答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。

得到“答案正确”的条件是:

  1. 字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;
  2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
  3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a、 b、 c 均或者是空字符串,或者是仅由字母 A 组成的字符串。

现在就请你为 PAT 写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。

输入格式:

每个测试输入包含 1 个测试用例。第 1 行给出一个正整数 n (<10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过 100,且不包含空格。

输出格式:

每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出 YES,否则输出 NO

输入样例:

8
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA

输出样例:

YES
YES
YES
YES
NO
NO
NO
NO

可以说是比较无聊的一道题,主要是找到规律

1.PAT可以

2.P(n个A)T可以(符合第4条规律,但由于除数不能为0)

3.(n个A)PAT(n个A)可以

4.(n个A)P(m/n个A)T(m个A m%n == 0)也可以

代码为:

#include<cstdio>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;int main()
{int n;int flag = 1;int p = 0, t = 0, left = 0, mid = 0, right = 0;//分别是p左边的a,t右边的a以及2者之间的achar str[10][100];scanf("%d", &n);for(int i = 0; i < n; i++)scanf("%s", str[i]);for(int i = 0; i < n; i++){flag = 1;p = 0, t = 0, left = 0, mid = 0, right = 0;for(int j = 0; j < strlen(str[i]); j++){if(str[i][j] == 'P' || str[i][j] == 'A' || str[i][j] == 'T'){if(str[i][j] == 'P'){p++;}else if(str[i][j] == 'T'){t++;}else if(str[i][j] == 'A' && p == 0){left++;}else if(str[i][j] == 'A' && p == 1 && t == 0){mid++;}else if(str[i][j] == 'A' && p ==1  && t ==1){right++;}}else{printf("NO\n");flag = 0;break;}}if(p == 1 && t == 1 && mid >= 1 && flag == 1){if(mid == 1 && left == right)printf("YES\n");else if(left == right && mid != 1 && left == 0)printf("YES\n");else if((mid == right / left) && (right % left == 0))printf("YES\n");elseprintf("NO\n");}else if(flag == 1)printf("NO\n");}return 0;
}

注意flag的使用是防止输出重复的NO。

结果为:

成功运行!

这篇关于PAT B1003 我要通过的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/793914

相关文章

PAT甲级-1044 Shopping in Mars

题目   题目大意 一串项链上有n个钻石,输入给出每个钻石的价格。用m元买一个连续的项链子串(子串长度可为1),如果不能恰好花掉m元,就要找到最小的大于m的子串,如果有重复就输出多个,按递增顺序输出子串的前端和后端索引。 原来的思路 取连续的子串使和恰等于m,没有恰等于就找最小的大于。可以将子串依次累加,使得每个位置都是起始位置到该位置的序列和,整个数组显递增顺序,就可以用右边减左边

PAT (Advanced Level) Practice——1011,1012

1011:  链接: 1011 World Cup Betting - PAT (Advanced Level) Practice (pintia.cn) 题意及解题思路: 简单来说就是给你3行数字,每一行都是按照W,T,L的顺序给出相应的赔率。我们需要找到每一行的W,T,L当中最大的一个数,累乘的结果再乘以0.65,按照例子写出表达式即可。 同时还需要记录每一次选择的是W,T还是L

【我要成为配环境高手】Visual Studio中Qt安装与配置(无伤速通)

1.下载安装Qt和VSIX插件 2.本地环境变量配置 添加如下: D:\ProgramData\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib D:\ProgramData\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin 3.VS配置 ⭐项目右键->属性->调试->环境,添加如下:(很重要,踩坑经验) D:\ProgramData

PAT (Advanced Level) Practice

1001:  题目大意: 计算 a+b 的结果,并以标准格式输出——即每三个数字一组,组之间用逗号分隔(如果数字少于四位,则不需要逗号分隔)  解析: 我们知道相加右正有负,对于样例来说 Sample Input: -1000000 9 Sample Output: -999,991 如果是从左往右,算上负号的话输出应该是-99,999,1 从右往左:-,999,991离正确

羊皮卷之七:我要笑遍世界

本文固定链接:http://blog.csdn.net/u013108312/article/details/53579235 我要笑遍世界。   只有人类才会笑。树木受伤时也会流“血”,禽兽也会因痛苦和饥饿而哭嚎哀鸣,然而,只有我们才具备笑的天赋,可以随时开怀大笑。从今往后,我要培养笑的习惯。   笑有助于消化,笑能减轻压力,笑,是长寿的秘方。现在我终于掌握了它。   我要笑遍世界。

羊皮卷之二:我要用全身心的爱来迎接今天

本文固定链接:http://blog.csdn.net/u013108312/article/details/53579214 我要用全身心的爱来迎接今天。   因为,这是一切成功的最大秘密。强力能够劈开一块盾牌,甚至毁灭生命,但是只有爱才具有无与伦比的力量,使人们敞开心扉。在掌握了爱的艺术之前,我只算商场上的无名小卒。我要让爱成为我最大的武器,没有人能抵挡它的威力。   我的理论,他们也许

1050 String Subtraction——PAT甲级

Given two strings S1​ and S2​, S=S1​−S2​ is defined to be the remaining string after taking all the characters in S2​ from S1​. Your task is simply to calculate S1​−S2​ for any given strings. However,

2017,我要做的还有更更多

年终总结,总结属于我的2016!!                 2016的日子,转眼已经过去了,我们经历了很多,同样也收获和失去了很多,但是,2017我们要做的还有更更多……

1105 链表合并——PAT乙级

给定两个单链表 L1​=a1​→a2​→⋯→an−1​→an​ 和 L2​=b1​→b2​→⋯→bm−1​→bm​。如果 n≥2m,你的任务是将比较短的那个链表逆序,然后将之并入比较长的那个链表,得到一个形如 a1​→a2​→bm​→a3​→a4​→bm−1​⋯ 的结果。例如给定两个链表分别为 6→7 和 1→2→3→4→5,你应该输出 1→2→7→3→4→6→5。 输入格式: 输入首先在第一

1110 区块反转——PAT乙级

给定一个单链表 L,我们将每 K 个结点看成一个区块(链表最后若不足 K 个结点,也看成一个区块),请编写程序将 L 中所有区块的链接反转。例如:给定 L 为 1→2→3→4→5→6→7→8,K 为 3,则输出应该为 7→8→4→5→6→1→2→3。 输入格式: 每个输入包含 1 个测试用例。每个测试用例第 1 行给出第 1 个结点的地址、结点总个数正整数 N (≤105)、以及正整数 K (