刷题随记 洛谷P1042 [NOIP2003 普及组] 乒乓球 边界约束错误,不要用一个点来约束,尽可能以区间的形式约束

博客作者通过分析在解决洛谷P1042 [NOIP2003 普及组] 乒乓球问题时遇到的错误,强调了审题和边界条件的重要性。第一次错误是由于未考虑到比分相差不超过2的情况,而第二次错误则是因为在修正后仍使用单一边界点,而不是区间约束。最终,作者提供了AC代码,并提醒在编程中注意边界条件的全面性。

洛谷P1042 [NOIP2003 普及组] 乒乓球.
在这里插入图片描述

第一次错误代码

#include<bits/stdc++.h>
using namespace std;
string a,c;
int l,r;
int len;
int main()
{
	while(cin>>c)
	{
		a=a+c;
	}
	len=a.length();
	for(int i=0;i<len;i++)
	{
		if(a[i]=='W')
		{
			l++;
			if(l==11)     //错误位置
			{
				cout<<l<<":"<<r<<endl;
				l=r=0;
			}
		}
		if(a[i]=='L')
		{
			r++;
			if(r==11)     //错误位置
			{
				cout<<l<<":"<<r<<endl;
				l=r=0;
			}
		}
		if(a[i]=='E')
		{
			cout<<l<<":"<<r<<endl;break;
		}
	}
	l=r=0;
	cout<<endl;
	for(int i=0;i<len;i++)
	{
		if(a[i]=='W')
		{
			l++;
			if(l==21)     //错误位置
			{
				cout<<l<<":"<<r<<endl;
				l=r=0;
			}
		}
		if(a[i]=='L')
		{
			r++;
			if(r==21)     //错误位置
			{
				cout<<l<<":"<<r<<endl;
				l=r=0;
			}
		}
		if(a[i]=='E')
		{
			cout<<l<<":"<<r<<endl;break;
		}
	}
	return 0;
}

原因分析

审题不清,未考虑到比分相差不超过2的情况

第二次错误代码

#include<bits/stdc++.h>
using namespace std;
string a,c;
int l,r;
int len;
int main()
{
	while(cin>>c)
	{
		a=a+c;
	}
	len=a.length();
	for(int i=0;i<len;i++)
	{
		if(a[i]=='W')
		{
			l++;
			if(l==11&&l-r>=2)      //仍然出错位置
			{
				cout<<l<<":"<<r<<endl;
				l=r=0;
			}
		}
		if(a[i]=='L')
		{
			r++;
			if(r==11&&r-l>=2)      //仍然出错位置
			{
				cout<<l<<":"<<r<<endl;
				l=r=0;
			}
		}
		if(a[i]=='E')
		{
			cout<<l<<":"<<r<<endl;break;
		}
	}
	l=r=0;
	cout<<endl;
	for(int i=0;i<len;i++)
	{
		if(a[i]=='W')
		{
			l++;
			if(l==21&&l-r>=2)      //仍然出错位置
			{
				cout<<l<<":"<<r<<endl;
				l=r=0;
			}
		}
		if(a[i]=='L')
		{
			r++;
			if(r==21&&r-l>=2)      //仍然出错位置
			{
				cout<<l<<":"<<r<<endl;
				l=r=0;
			}
		}
		if(a[i]=='E')
		{
			cout<<l<<":"<<r<<endl;break;
		}
	}
	return 0;
}

原因分析

在第一次改正后,边界判断继续出错。因为当比分相差大于二时,边界条件就不一定是11或21了
所以以后边界条件尽量不要用一个点来约束,尽可能以区间的形式约束

AC代码

#include<bits/stdc++.h>
using namespace std;
string a,c;
int l,r;
int len;
int main()
{
	while(cin>>c)
	{
		a=a+c;
	}
	len=a.length();
	for(int i=0;i<len;i++)
	{
		if(a[i]=='W')
		{
			l++;
			if(l>=11&&l-r>=2)
			{
//				cout<<l<<":"<<r<<endl;	
				printf("%d:%d\n",l,r);
				l=r=0;
			}
		}
		if(a[i]=='L')
		{
			r++;
			if(r>=11&&r-l>=2)
			{
//				cout<<l<<":"<<r<<endl;
				printf("%d:%d\n",l,r);
				l=r=0;
			}
		}
		if(a[i]=='E')
		{
//			cout<<l<<":"<<r<<endl;
			printf("%d:%d\n",l,r);
			break;
		}
	}
	l=r=0;
//	cout<<endl;
	printf("\n");
	for(int i=0;i<len;i++)
	{
		if(a[i]=='W')
		{
			l++;
			if(l>=21&&l-r>=2)
			{
				cout<<l<<":"<<r<<endl;
				l=r=0;
			}
		}
		if(a[i]=='L')
		{
			r++;
			if(r>=21&&r-l>=2)
			{
				cout<<l<<":"<<r<<endl;
				l=r=0;
			}
		}
		
		if(a[i]=='E')
		{
			cout<<l<<":"<<r<<endl;break;
		}
	}
	return 0;
}

两次改正后终于AC了,约束条件(尤其是第一次错过后再看看是否其他条件也会改变)还是要注意啊。

SAP PO(Process Orchestration)中间件作为企业服务总线(ESB)和企业应用集成(EAI)解决方案,其错误处理机制是确保系统稳定性和数据完整性的关键。要实现基本的错误处理机制,通常需要配置异常处理、消息持久化和补偿事务等组件。以下是一个详细的操作流程: 参考资源链接:[SAP中间件PO技术总结](https://wenku.youkuaiyun.com/doc/73esi8ui8y?spm=1055.2569.3001.10343) 1. 定义异常处理:在SAP PO中,可以通过配置异常处理来捕获和处理运行时的错误。首先,需要在流程设计中定义一个异常对象,并将其与特定的错误代码或异常类型关联。在BPMN或IDoc适配器中设置异常处理规则,以便在发生错误时触发特定的处理逻辑。 2. 配置消息持久化:为了防止数据丢失,可以配置消息持久化,确保即使在系统故障时,消息也能够被保存并重新传递。在Integration Directory中,可以为相应的接口配置持久化队列,并设置持久化参数。 3. 设计补偿事务:对于需要事务性操作的流程,设计补偿事务是必不可少的。这涉及到在流程中设置一个或多个操作点,如果在后续步骤中发生错误,可以回滚到这些操作点来撤销已经执行的操作。这通常在流程中使用事务块和倒带功能来实现。 具体配置步骤如下: - 登录到SAP PO管理控制台,打开相应的Integration Builder。 - 选择需要配置错误处理的流程或接口。 - 在流程设计中,找到需要设置异常处理的活动或通道,右键选择‘Configure Exception’。 - 在异常配置界面中,定义异常类型,并指定相应的异常处理逻辑。 - 在Integration Directory中,进入相应的接口配置,选择‘Message Type’,然后定义消息持久化队列。 - 根据需要设置消息持久化规则,如超时时间、重试次数等。 - 在流程设计中,适当地使用事务块,通过‘Transaction’组件来管理事务边界。 - 对于补偿事务,配置‘Rollback’或‘Compensation’处理逻辑,并确保流程中的关键操作点有相应的事务处理配置。 通过上述步骤,可以在SAP PO中间件架构中实现一个基本的错误处理机制。这不仅能提高系统的健壮性,还能确保数据的完整性和一致性。对于更深入的理解和实践,强烈推荐查阅《SAP中间件PO技术总结》文档,该文档详细介绍了SAP PO中间件的配置技术,是深入学习和解决实际问的宝贵资料。 参考资源链接:[SAP中间件PO技术总结](https://wenku.youkuaiyun.com/doc/73esi8ui8y?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值