1003 我要通过!

1003 我要通过!

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

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

字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;
任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
如果 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

思路分析:
这道题的重点就是要理解这道题的意思,尤其是条件2、3。经过分析我们可以知道:
正确的情况是:xPATx、xPAATxx、xPAAATxxx……
我们可以发现结论是:x中A的个数记为m,P和T中间的A的个数记为n,那么T之后A的个数为n*m个;
并且还要满足字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符这个条件;
并且x 或者是空字符串,或者是仅由字母 A 组成的字符串;
并且P和T之间至少有一个A

知道结论之后剩下的任务主要就是编程了。

代码:

#include<iostream>
#include<string.h>
using namespace std;


//当字符串s满足的时候返回1,不满足的时候返回0
int istrue(char* s) {
	int i = 0;
	while (s[i] != '\0') {
		if ((s[i] != 'P') && (s[i] != 'A') && (s[i] != 'T')) {
			return 0;
		}
		i++;
	}
	//也要注意按照下面的思路,这个PT也会判断是正确的,所以先把他排除
	if (strcmp(s, "PT") == 0) {
		return 0;
	}
	/*if (strcmp(s, "PAT") == 0) {
		return 1;
	}
	else if(strcmp(s, "PAAT") == 0) {
		return 1;
	}
	*/
	i = 0; //注意i来回到最初的位置
	int m = 0;//记录x中A的个数
	int n = 0;//P和T中间的A的个数
	//计算m
	if (s[0] == 'A') {
		while ((s[i] != 'P') && (s[i] != '\0')) {
			if (s[i] == 'T')
				return 0;
			m++;
			i++;
		}
	}
	//计算n
	if (s[i] == 'P') {
		while ((s[i] != 'T') && (s[i] != '\0')) {
			i++;
			if (s[i] == 'A')
				n++;
			if (s[i] == 'P')
				return 0;
		}
	}
	//注意这里,P和T之间至少有一个A
	if (n == 0)
		return 0;
	if (s[i] == '\0')
		return 0;
	int a = n*m;
	i = i + 1; //因为s[i]为T,所以要加1
	while (a > 0) {
		if (s[i] != 'A')
			return 0;
		else {
			a--;
			i++;
		}
	}
	if (a == 0) {
		return 1;
	}
	return 0;
}

int main() {
	int n;
	cin >> n;//n为需要检测的字符串个数
	char s[100];
	for (int i = 0; i < n; i++) {
		cin >> s;
		if (istrue(s) == 1) {
			cout << "YES\n";
		}
		else {
			cout << "NO\n";
		}
	}
}

补充:
代码前提的快捷键:shift+tab

已标记关键词 清除标记
相关推荐
<p> <b><span style="background-color:#FFE500;">【超实用课程内容】</span></b> </p> <p> <br /> </p> <p> <br /> </p> <p> 本课程内容包含讲解<span>解读Nginx的基础知识,</span><span>解读Nginx的核心知识、带领学员进行</span>高并发环境下的Nginx性能优化实战,让学生能够快速将所学融合到企业应用中。 </p> <p> <br /> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b><br /> </b> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b><span style="background-color:#FFE500;">【课程如何观看?】</span></b> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> PC端:<a href="https://edu.csdn.net/course/detail/26277"><span id="__kindeditor_bookmark_start_21__"></span></a><a href="https://edu.csdn.net/course/detail/27216">https://edu.csdn.net/course/detail/27216</a> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 移动端:CSDN 学院APP(注意不是CSDN APP哦) </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 本课程为录播课,课程永久有效观看时长,大家可以抓紧时间学习后一起讨论哦~ </p> <p style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <br /> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <strong><span style="background-color:#FFE500;">【学员专享增值服务】</span></strong> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b>源码开放</b> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化 </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 下载方式:电脑登录<a href="https://edu.csdn.net/course/detail/26277"></a><a href="https://edu.csdn.net/course/detail/27216">https://edu.csdn.net/course/detail/27216</a>,播放页面右侧点击课件进行资料打包下载 </p> <p> <br /> </p> <p> <br /> </p> <p> <br /> </p>
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页