pat(basic level) 1003

本文深入探讨了在解决特定编程问题时如何优化代码逻辑,通过实例展示了使用多种编程技巧来提升代码效率。文章重点分析了一道编程题目的解题思路与代码实现过程,强调了逻辑清晰性和细节处理的重要性。

题目:http://pat.zju.edu.cn/contests/pat-b-practise/1003

题目大意:只能出现P ,A, T字符,

                    如果形如 --PAT--则P前面的A和T后面的T的个数相同

                    如果形如 aPbTc则P前面A的个数a  ,PT之间的A的个数b和T后面的A的个数c   满足关系:a*b=c

                   另外要注意P一定要在T的前面


下面写的代码很粗糙    有时间在优化一下

#include<iostream>
using namespace std;
int main ()////不能用void main()?
{
	int n,i,f_p,f_t;
	char a[104];
	
	while(cin>>n)
	{
		while(n)
		{
			n--;
			cin>>a;
			int flag1[4]={0},flag3=0;//每次循环初始化
	        int flag2[4]={0};f_p=f_t=0;
//			cout<<a<<endl;////////
			for(i=0;a[i]!='\0';i++)//for 是i++还是++i?;
			{
				if(a[i]=='P') 
				{
					flag1[1]=1,flag2[1]++;f_p=i;
					if(i-flag2[2]!=0){flag2[0]=-1;break;}
				}
				if(a[i]=='A') flag1[2]=1,flag2[2]++;
				if(a[i]=='T') 
				{
					flag1[3]=1,flag2[3]++;f_t=i;
					if(i-flag2[1]-flag2[2]!=0){flag2[0]=-1;break;}
				}
				
			}//if(f_p*f_t!=i-f_t) flag3=-1;
                if(f_t-f_p==2)
				{
					if(f_p!=i-f_t-1)   flag3=-1;
				}
				if(f_t-f_p>2)
				{
					if(f_p*(f_t-f_p-1)!=i-f_t-1)   flag3=-1;
				}
		            if(f_t<f_p||f_t-f_p==1) flag3=-1;
			if(flag2[1]!=1||flag2[3]!=1){flag2[0]=-1;}
			if(flag2[0]==-1||flag1[0]==-1||flag3==-1)
				cout<<"NO"<<endl;
			else cout<<"YES"<<endl;
			
		}

	}
	return 0;
}


总结:

主函数用int main()

for(;;i++)在每次循环末尾改变i后与条件比较 ,注意跳出循环后i的的值

另外做题时要先分析清楚逻辑关系,不然容易逻辑混乱并且很浪费时间

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值