【浙江大学PAT真题练习乙级】1003 我要通过!(20分) 真题解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 【浙江大学PAT真题练习乙级】1003 我要通过!(20分) 真题解析

题目描述


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

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

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

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

输入格式

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

输出格式

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

思路解析

  1. 条件1就没什么说的,注意不要有非法字符,可以用一个计数器专门记录非法字符,一旦有就是NO。
  2. 在条件1的基础上,条件2说的是P之前的空字符或者A的数量要等于T之后的空字符或者A字母数量,由于这里P和T只出现一次,因此if判断找到这两个P、T字母之后计算前后数量相等就可以了。
  3. 条件三说的是P左边一个,PT中间两个,T之后两个。因此条件2三综合就是P左边的A或者空字符数量乘PT中间的数量等于T右边的数量。

  看了我好久,语文没学好就是这下场。

C++实现

#include <iostream>
#include<string>
#include <stdio.h>
using namespace std;
void Solve(string input){
    int num_of_P =0; // 记录P的个数
    int local_of_P =0; // 记录P的位置,之后好计算之前A与空格的个数
    int num_of_T =0; // 记录T的个数
    int local_of_T =0; // 记录T的位置,之后好计算T之后A与空格的个数
    int other = 0; // 记录非法字符
    for(int i=0; i < input.length(); i++){
        if(input[i]=='P'){
            num_of_P ++;
            local_of_P = i;
        }
        else if(input[i]=='T'){
            num_of_T++;
            local_of_T =i;
        }
        else if(input[i]!='A' ){
            other++;
        }
    }
    if(num_of_P !=1||num_of_T!=1||other||local_of_T-local_of_P<=1){
        printf("NO\n");  // 有多个P,多个T,非法字符,以及P和T之间无A的情况
    }
    else if((local_of_P)*(local_of_T-local_of_P-1)==(input.length()-local_of_T-1) ){
        printf("YES\n");  // 考虑了上述几种特殊情况之后再来考虑正常情况
    }
    else{
        printf("NO\n");  // A的数量不满足要求的情况
    }
}
int main(){
    int n;
    cin>>n;
    string inputStr;
    for(int i=0;i<n;i++)
    {
        cin>>inputStr;
        Solve(inputStr);
    }
  return 0;
}

Python实现

n = int(input())
def Solve(input_str):
    num_of_P = input_str.count('P')
    local_of_P = input_str.find('P')
    num_of_T = input_str.count('T')
    local_of_T = input_str.find('T')
    num_of_A = input_str.count('A')
    if num_of_P != 1 or num_of_T !=1 or len(input_string) != num_of_P+num_of_A+num_of_T or local_of_T-local_of_P <=1:
        print('NO')
    elif local_of_P*(local_of_T-local_of_P-1)==len(input_string)-local_of_T-1:
        print('YES')
    else:
        print('NO')
for i in range(n):
    input_string = str(input())
    Solve(input_string)
相关文章
|
7月前
|
Java API
Java之File类的详细解析及小练习
2. File类 2.1 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。 2.2 构造方法
87 0
|
测试技术 C++ Python
【浙江大学PAT真题练习乙级】1005 继续(3n+1)猜想 (25分) 真题解析
【浙江大学PAT真题练习乙级】1005 继续(3n+1)猜想 (25分) 真题解析
|
7月前
|
前端开发 程序员
CSS基础详细解析(附带综合小练习)(2)
文本缩进 属性名:text-indent 属性值:
65 0
|
7月前
|
前端开发 JavaScript
CSS基础详细解析(附带综合小练习)(1)
目标:掌握 CSS 属性基本写法,能够使用文字相关属性美化文章页。 01-CSS初体验 层叠样式表 (Cascading Style Sheets,缩写为 CSS),是一种 样式表 语言,用来描述 HTML 文档的呈现(美化内容)。
68 0
|
测试技术 C++ Python
【浙江大学PAT真题练习乙级】1009 说反话 (20分)真题解析
【浙江大学PAT真题练习乙级】1009 说反话 (20分)真题解析
|
存储 机器学习/深度学习 测试技术
【浙江大学PAT真题练习乙级】1008 数组元素循环右移问题 (20分)真题解析
【浙江大学PAT真题练习乙级】1008 数组元素循环右移问题 (20分)真题解析
113 0
|
C++ Python
【浙江大学PAT真题练习乙级】1007 素数对猜想 (20分) 真题解析
【浙江大学PAT真题练习乙级】1007 素数对猜想 (20分) 真题解析
|
测试技术 C语言 C++
【浙江大学PAT真题练习乙级】1006 换个格式输出整数 (15分) 真题解析
【浙江大学PAT真题练习乙级】1006 换个格式输出整数 (15分) 真题解析
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
71 2
|
2月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
76 0

推荐镜像

更多
下一篇
DataWorks