转跳点:

  这道题可就整死我了,第三个条件我看了好久才看懂。当我看懂第三个条件之后,就感觉自己之前好蠢。唉,不多说,先上题

  样例较长,比较所以可能会有些模糊。题目的要求很明确,符合三个条件,任意一个条件都视为答案正确,然后输出OK。看清楚需求之后,我们来分析一下条件。

条件:

  第一种:只含有P、A、T三个字符,少一个都不行,这个意思就是 这字符串至少是长度为 3 的 PAT。

  第二种:形如“……”PAT“……”形式的字符串,前后“……”的中的字符只能是由A所构成的字符串且长度必须相等,

    也就是形如 APATA, AAPATAA, AAAPATAAA……这样的字符串,也判定为答案正确

  第三种:形如aPbTc的字符串如果符合上述两种,那么 aPAbTac 也为“答案正确”。

 我们得好好分析一下第三个个条件,单独分析第三个条件会发现无论输入是什么都是OK。所以我们应该结合样例分析。

    根据样例里的这三组样例:

       AAPATAA    --YES;

      AAPAATAAAA  --YES;

      APAAATAA   --NO。

  这样我们就可以得出一下规律

  只要P前面的A的个数乘以PT之间的A的个数的积等于T后面的A的个数且字符串中只含有单个P和T就为YES,否则NO。即条件三中符合a*b=c。然后看条件二不难发现:条件二包含在条件三中。知道这些后,就可以通过了。

  最后当然是实现啦:

代码:

 1 #include <stdio.h>
2 #include <string.h>
3 #define LEN 101
4
5 int main()
6 {
7 int cnt_str = 0; //字符串个数
8 scanf("%d", &cnt_str);
9 for (int i = 0; i < cnt_str; i++)
10 {
11 char str[LEN];
12 scanf("%s", str); //读入字符串
13 int cnt_P = 0, cnt_T = 0, isRight = 1;
14 int pos_P = 0, pos_T = 0; //设置P、T的下标
15 for (int i = 0; i < strlen(str); i++)
16 {
17 if (str[i] == 'P')
18 {
19 pos_P = i; //记录P的下标
20 cnt_P++;
21 }
22 else if (str[i] == 'T')
23 {
24 pos_T = i; // 记录T的下标
25 cnt_T++;
26 }
27 else if (str[i] != 'A')
28 { //有其他字符
29 isRight = 0;
30 break;
31 }
32 }
33 if (isRight && cnt_P == 1 && cnt_T == 1)
34 { //如果字符串只有PAT三种字符 且 P、T数量为1
35 int l_A = 0, c_A = 0, r_A = 0; // 声明左、中、右 字符A的数量
36 l_A = pos_P;
37 c_A = pos_T - pos_P - 1;
38 r_A = strlen(str) - pos_T - 1;
39 if (c_A > 0 && l_A * c_A == r_A)
40 { //PT之间有A,且A的数量 左*中 = 右
41 printf("YES\n");
42 continue;
43 }
44 }
45 printf("NO\n");
46 }
47 return 0;
48 }

  PTA不易,诸君共勉!

最新文章

  1. HDU1502 Regular Words
  2. 【C#】1.算法温故而知新 - 简单的桶排序
  3. 手机App开发
  4. mapreduce任务中Shuffle和排序的过程
  5. STL之vetor 排序
  6. 【JavaScript】JavaScript模块化编程 - CommonJS, AMD 和 RequireJS之间的关系
  7. Spring Named Parameters examples in SimpleJdbcTemplate
  8. Marketplace Client- Download
  9. JavaScript Client-Side
  10. iOS 颜色选择器 仿ps 调色板
  11. Python中urlopen()介绍
  12. THINKPHP 5.0目录结构
  13. 表连接查询(2-n)
  14. 泛型的 typeof
  15. [development][http][libhtp] suricata的http库--libhtp
  16. 线程TLAB局部缓存区域(Thread Local Allocation Buffer)
  17. Hibernate中load与get,update与merge方法的区别
  18. 面试题思考:Java RMI与RPC,JMS的比较
  19. Service Fabric eShop On Containers
  20. selenium自动化测试资源整理

热门文章

  1. node.js是什么,node.js创建应用
  2. redhat 7.6 用户和组
  3. elasticsearch mapping简单介绍
  4. python 网络爬虫(二)
  5. kill和raise
  6. 一 SpringMvc概述&amp;入门配置
  7. jqGrid一次性读取本地数据
  8. 2_01_MSSQL课程_查询
  9. require - 引入文件
  10. 081、Java数组之数组传递