题目描述
解题思路
第一步:查找字符串中除PAT之外的字符,如果存在就NO,在查找的过程中,PT只出现1一次,A至少存在一次,如果不满足NO
第二步:
经分析,如果要YES,我们可以得到,1.c是a的倍数(c,a不为0时),最终得到a,c相等且b=1的状态。2.a,c都为0时,b的值随便(在上一步时判断了,b肯定不为0)。除此之外都是NO。
代码有解释
代码实现
#include <stdio.h> int main() { int n,a,b,c; scanf("%d", &n); char arr[10][100]; int i = 0; for (i=0;i<n;i++) { scanf("%s", arr[i]); } i = 0; //统计P,T前a,中b,后c中A的个数 while (i<n) { a = 0; b = 0; c = 0; char* temp = (char*)arr[i]; //第一步开始进行判断 while (*temp) { if (*temp == 'A') a++; else if (*temp == 'P') b++; else if (*temp == 'T') c++; else//不是这3个字符时跳出 break; temp++; } //下面排除多P多T没有A的情况 if (b!=1||c!=1||a==0) { printf("NO\n"); i++; } //除PAT之外的字符 else if (*temp!='\0') { printf("NO\n"); i++; } //只含PAT的字符 else { a = 0; b = 0; c = 0; temp = (char*)arr[i]; //P前面的A的个数 while (*temp++ != 'P'&& *temp) { a++; } //P与T之间的A的个数 while (*temp++ != 'T' && *temp) { b++; } //T之后的A的个数 while (*temp) { c++; temp++; } //变成aPbTc,其中a与c相等 while (c) { if (a && c && c != a && c % a == 0) { c = c - a; b--; } else break; } if (b == 1&& c == a)//满足aPbTc的形式 printf("YES\n"); else if (a == 0&& c == a)//满足PbT的形式 printf("YES\n"); else//错误形式 printf("NO\n"); i++; } } return 0; }