"答案正确" 是自动判题系统给出的最令人欢喜的回复。本题属于 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)空字符串 不是 空格键 的意思。
- 2)根据1知
- 字符串中有且仅有'P''A''T'三个字符。
- 3)根据2,3和输入样例可知:
- 输入必须包含一个P和一个T;
- P和T的位置关系不能颠倒;
≡ 。
- #include
- #include<string.h>
- char str[1000];
- int main()
- {
- int i, n;
- scanf_s("%d", &n);
- while (n--)
- {
- int num, temp, aunt, p, t; //此处变量为局部变量,写在全局变量处会导致程序出错
- num = 0; temp = 0; aunt = 0;
- p = 0; t = 0;
- scanf_s("%s", str, 100); //scanf_s为vs2017中用法,提交时将scanf_s改成scanf即可(将100删掉)
- for (i = 0; i )
- {
- if (str[i] == 'P')
- {
- p = i; //p所在位置 从1开始计数
- num++;
- }
- if (str[i] == 'T')
- {
- t = i; //t所在位置 从1开始计数
- temp++;
- }
- if (str[i] == 'A')
- {
- aunt++; //A的总个数
- }
- }
- if ((num + temp + aunt)!= strlen(str) || num > 1 || temp >1 || p*(t - p - 1) != strlen(str) - t-1||t-p<=1)
- {
- printf("NO\n");
- }
- else
- {
- printf("YES\n");
- }
- }
- }
来源: http://www.bubuko.com/infodetail-1999837.html