1003. 我要通过!

PAT 乙级
原题链接

  1. 字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;【仅有PAT】
  2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;【形如xPATx】
  3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a、 b、 c 均或者是空字符串,或者是仅由字母 A 组成的字符串。【 aPbTc==aPbATca】
【仅有PAT】n1=0,n2=1,n3=0
【形如xPATx】n1=x,n2=1,n3=x
【 aPbTc==aPbATca】n1=a,n2=b,n3=c; n1=a,n2=bA,n3=ca;

在这里插入图片描述

  • n1*n2=n3(n1,n2,n3分别代表P前、PT间、T后的A数量)
#include<stdio.h>
#include<string.h>

int main(){
	int i,p=0,a=0,t=0,j,k;
	scanf("%d",&i);
	//i为输入样例个数 
	int pin[99];
	//pin为保存输入样例是否正确,2---》有其他字符,1-----》正确 

	k=i;
	//循环输入 
	while(k!=0){
		char n[99]={};
		scanf("%s",n);
		 for(j=0;n[j]!='\0';j++){
		 	//判断P,T位置 
		 	switch(n[j]){
		 		case 'P': p=j;break;
		 		case 'A': a++;break;//确保输入样例中包含字符A 
		 		case 'T': t=j;break;
		 		default: pin[k]=2;//含有其他字符 
			 } 
		 }
		 //数学推导
		 if(p*(t-p-1)==(strlen(n))-t-1){
		 	if((pin[k]!=2)&&(a!=0))
		 	pin[k]=1;
		 }
		 k--;
		 t=p=a=0;
	}
	while(i!=1){
		if(pin[i]==1)
		printf("YES\n");
		else
		printf("NO\n");
		i--;
	}
	if(pin[1]==1)
		printf("YES");
	else
		printf("NO");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值