第一次错误代码
#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了,约束条件(尤其是第一次错过后再看看是否其他条件也会改变)还是要注意啊。