PAT (Basic Level) Practice 1003 我要通过!

#include<stdio.h>
#include <string.h>
//找规律知,YES的标准是左边的A的数量*中间的A的数量==右边的A的数量,同时要求PT中间要有A
int main(){
	int a,i=0,len,j,l,m,r,p=0,t=0,key,np,nt;//l:left,m:middle,r:right,np:p出现的次数,nt同理,key用于实现单一出口,len是每个字符串的长度 
	scanf("%d",&a);
	char b[a][100];
	for(;i<a;i++){
		scanf("%s",b[i]);//b[i]本身就是地址了,所以不需要在前面加& 
	}
	for(i=0;i<a;i++){
		key=1;
		np=0;
		nt=0;
		len=strlen(b[i]);//是这样吗? 还是加* 呢? 
		for(j=0;j<len;j++){
			if(b[i][j]!='A'&&b[i][j]!='P'&&b[i][j]!='T'){
				key=0;
				break;}			
			if(b[i][j]=='P'){
				p=j+1;//记录第一个P的位置 
				np++;
				}
			if(b[i][j]=='T'){
				t=j+1;//记录第一个T的位置 
				nt++;
				}	
			}
		if(key==1){
			l=p-1;
			m=t-p-1;
			r=len-t;
			if(l*m!=r||m==0||np!=1||nt!=1){
				key=0;
			}
		}
		if(key){
			printf("YES");
		}else{
			printf("NO");
		}
		if(i+1!=a){
			printf("\n");
		}
		}
		return 0; 
	}

写起来很吃力,一方面题目不容易读懂,另一方面判断功能也不容易实现。(其实就是因为菜)

感觉代码不优美,不知道有没有更好的写法。

另外,题目输入样例APT以及对于的输出样例NO是后来加的,一些旧版本的解答可能没有考虑到这点。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值