1003 我要通过
发布日期:2022-04-07 05:22:34 浏览次数:18 分类:技术文章

本文共 1657 字,大约阅读时间需要 5 分钟。

在这里插入图片描述

1003 我要通过

题目描述


在这里插入图片描述

解题思路

第一步:查找字符串中除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 
   
    int main(){
   
    
int n,a,b,c;
scanf("%d", &n);
char arr[10][100];
int i = 0;
for (i=0;i
{    
scanf("%s", arr[i]);
}
i = 0;
//统计P,T前a,中b,后c中A的个数
while (i
{    
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;}

在这里插入图片描述

转载地址:https://blog.csdn.net/m0_60598323/article/details/123726348 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:1004 成绩排名
下一篇:1002 写出这个数

发表评论

最新留言

表示我来过!
[***.188.10.176]2022年09月30日 09时03分23秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章