美文网首页
PAT乙级1003-Python

PAT乙级1003-Python

作者: 逆风飞翔的鸟 | 来源:发表于2019-04-04 18:22 被阅读0次

1003 我要通过! (20 分)

注意:代码满分通过

“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”
得到“答案正确”的条件是:
1.字符串中必须仅有 PAT这三种字符,不可以包含其它字符;
2.任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
3.如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 abc 均或者是空字符串,或者是仅由字母 A 组成的字符串。

输入格式:

每个测试输入包含 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.P必须在T的前面
2.P和T之间必须有字符,且一定包含A
3.P与T之间的字符串长度影响P和T两侧的字符串长度。P与T之间的字符串长度*P左侧字符串的长度=P右侧字符串的长度

代码:

def isValid(s):
    x = -1
    y = -1
    for i in range(len(s)):  # 找到P和T的最靠后面的位置
        if s[i] == 'P':
            x = i
        if s[i] == 'T':
            y = i
    if x == -1 or y == -1:  # 如果找不到P或者T则返回False
        return False
    else:
        if x > y:  # P在T的后面,返回False
            return False
        else:      # P在T前面
            if y == x + 1:  # P,T之间没有字符,返回False
                return False
            else:           # P,T之间有字符
                if x != 0:  # 字符串不以P开头
                    b = s[0:x]
                else:       # 字符串以P开头
                    b = []
                c = s[(x + 1):y]
                if y != len(s) - 1:  # 字符串不以T结尾
                    d = s[(y + 1):len(s)]
                else:                # 字符串以T结尾
                    d = []
                # 判断各个分段是否是字符A组成
                for i in b:
                    if i != 'A':
                        return False
                for i in c:
                    if i != 'A':
                        return False
                for i in d:
                    if i != 'A':
                        return False
                # 条件判断
                if d == b * len(c):
                    return True
                else:
                    return False
def main():
    n = int(input())
    line = ''
    while n:
        line = input()
        if isValid(line):
            print("YES")
        else:
            print("NO")
        n -= 1
if __name__ == "__main__":
    main()

运行结果:

运行截图

总结

觉得这道题非常复杂,总是漏情况,仔细审题,并寻找规律,计算机学科是一个需要寻找规律的学科。

正则表达式

import re

n = int(input())
for i in range(n):
    line = input()
    if re.match(r'A*PA+TA*', line):    # 在字符串中进行匹配
        a = re.split(r'[P|T]', line)   # 以字符P,T进行分段
        if a[0] * len(a[1]) == a[2]:   # 条件判断
            print('YES')
        else:
            print('NO')
    else:
        print('NO')

以上代码为参考别人所写,并非CV,我还自己学习了正则表达式相关的知识。正则表达式学习

相关文章

  • PAT乙级1003-Python

    1003 我要通过! (20 分) 注意:代码满分通过 “答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于...

  • PAT1085 乙级题解

    最近准备PAT,临近考试,打算把刷过的PAT都好好写一个题解。加深巩固一下 PAT 乙级1085 1085 PAT...

  • PAT乙级 1085 题解

    最近准备PAT,临近考试,打算把刷过的PAT都好好写一个题解。加深巩固一下 PAT 乙级1085 1085PAT单...

  • PAT 乙级 1001

    题目本身不难,主要思路为判断输入的数为奇数还是偶数 import java.util.Scanner; publi...

  • 【PAT乙级】1001~1005

    1001 3n+1猜想 1002 写出这个数 1003 输出正确PAT 1004 输出成绩max min 1...

  • PAT乙级----数字分类

    题目描述 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和...

  • (原创PAT乙级1085 PAT单位排行)

    题目 1085 PAT单位排行 (25 分)每次 PAT 考试结束后,考试中心都会发布一个考生单位排行榜。本题就请...

  • Python PAT 乙级考试1021

    1021个位数统计(15 分) 给定一个k位整数N=d​k−1​​10​k−1​​+⋯+d​1​​10​1​​+d...

  • Python PAT 乙级考试1004

    1004成绩排名(20 分) 读入n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。...

  • Python PAT 乙级考试1027

    1027打印沙漏(20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式...

网友评论

      本文标题:PAT乙级1003-Python

      本文链接:https://www.haomeiwen.com/subject/pqgrvqtx.html