C/C++知识点之C++ PAT乙级1003
小标 2018-08-27 来源 : 阅读 1705 评论 0

摘要:本文主要向大家介绍了C/C++知识点之C++ PAT乙级1003,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之C++ PAT乙级1003,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

1003. 我要通过!(20)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于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.字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;

2.任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;

  这里要注意空字符串不是空格!!!即正确形式为PAT、APATA、AAPATAA等。P之前的A个数与T之后的A个数相等。

3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 A 组成的字符串。

  这个要求是相对而言比较有难度的,需要仔细分析,一开始拿到可能完全不理解题意。aPbATca正确的前提是aPbTc正确,那么如何保证aPbTc正确呢?

  根据之前的条件可知,能判断正确的必然只有条件二。即第一次递推时,aPbTc满足条件二,b=='A',a==c;

    递推关系:


  以此类推我们可以总结出一个关系,T后面A的个数等于P前A的个数乘以P和T之间的A的个数。

  这道题不难但是条件三挺绕的emmm,我是用字符串写的调用的str.length(),网上大部分都是直接用的int去数的,本质是差不多的~

  起初是看到三个功能所以写了三个函数,后来发现函数一是不必要的就注释掉了~

复制代码
 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 bool fun1(string m);
 5 bool fun2(string m);
 6 bool fun3(string m);
 7 int main()
 8 {
 9     int num;
10     cin >> num;
11     string a[10];
12     for (int i = 0; i < num; i++)
13         cin >> a[i];
14     for (int i = 0; i < num; i++)
15     {
16         //bool first = fun1(a[i]);
17         bool second = fun2(a[i]);
18         bool third = fun3(a[i]);
19         if ((/*first&&*/second) || (/*first&&*/third))
20             cout << "YES" << endl;
21         else
22             cout << "NO" << endl;
23     }    
24 }
25 bool fun1(string m)
26 {
27     int n = m.length();
28     for (int j = 0; j < n; j++)
29     {
30         if (m[j] != 'P' && m[j] != 'A' && m[j] != 'T')
31             return false;
32     }
33     return true;
34 }
35 bool fun2(string m)
36 {
37     int j = 0;
38     string str1, str2, str3;
39     for (; m[j] == 'A'; j++)
40     {
41         str1 += m[j];
42     }
43     if (m[j] != 'P' || m[j + 1] != 'A' || m[j + 2] != 'T')
44         return false;
45     j += 3;
46     for (; m[j] == 'A'; j++)
47     {
48         str2 += m[j];
49     }
50     if (j != m.length())
51         return false;
52     if (str1 != str2)
53         return false;
54     return true;
55 }
56 bool fun3(string m)
57 {
58     int j = 0;
59     string str1, str2, str3;
60     for (; m[j] == 'A'; j++)
61     {
62         str1 += m[j];
63     }
64     if (m[j] != 'P')
65         return false;
66     j += 1;
67     for (; m[j] == 'A'; j++)
68     {
69         str2 += m[j];
70     }
71     if (str2 == "")
72         return false;
73     if (m[j] != 'T')
74         return false;
75     j += 1;
76     for (; m[j] == 'A'; j++)
77     {
78         str3 += m[j];
79     }
80     if (j != m.length())
81         return false;
82     if (str3.length()!=(str1.length()*str2.length()))
83         return false;
84     return true;
85 }    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved