您的位置:首页 > 其它

PAT 1003. 我要通过!(20)

2015-12-23 19:57 232 查看
题目内容我不多说,经过在网上查找,发现其中一个博客上用c写的解法很简单,但是没有注释,为了有助于理解,我加以注释。

#include <stdio.h>
#include <string.h>
int main()
{
char c[100];
int i,j,n;
int count_P,count_A,count_T,pos_P,pos_T;//分别代表'P','A','T'字符的个数,还有'P','T'的位置
scanf("%d\n",&n);
for(i=0;i<n;i++)
{
gets(c);
count_P = 0;
count_A = 0;
count_T = 0;
pos_P = 0;
pos_T = 0;
for(j=0;j<strlen(c);j++)
{
if(c[j]=='P')
{
count_P++;//记录'P'的个数
pos_P = j;//记录'P'的位置
}
if(c[j]=='A')
count_A++;
if(c[j]=='T')
{
count_T++;
pos_T = j;
}
}
/*
五种情况下是不正确的:
1,
4000
'P','A','T'个数总和大于其长度,说明中间有空格,因为gets()函数是能够将空格读入的
2,'T'在'P'后一位,没有'A'
3,'P'个数不止一个,'T'个数也不止一个
4,当'P'与'T'之间的'A'的个数与'P'之前'A'的个数相乘的个数是要等于'T'后面'A'的个数的,否则为错
*/
if(count_P+count_A+count_T != strlen(c) || pos_T-pos_P<=1 || count_P>1 || count_T>1 || pos_P*(pos_T-pos_P-1)!=strlen(c)-pos_T-1)
printf("NO\n");
else
printf("YES\n");
}
}


原作者代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: