先放个题目:
以及题目链接:
然后是我的代码
#include<iostream>
using namespace std;
char list[62750];
int main()
{
char a;
int i=0;
int hwin=0,lwin=0; //记录实时分数
int winscore11=11,winscore21=21;
while(cin>>a){ //输入比赛结果
list[i]=a;
if(a=='E')
break;
i++;
}
if(list[0]=='E'){ //判断一把没打的情况
cout<<"0:0"<<endl<<endl<<"0:0";
return 0;
}
for(int k=0;k<i;++k){ //11分赛制的结果
if(list[k]=='W'){
hwin+=1;
if(hwin==winscore11){
if(hwin-lwin<2) //判断分差是否大于等于2
winscore11++;
else{
cout<<hwin<<":"<<lwin<<endl;
hwin=0;
lwin=0;
winscore11=11;
}
}
}
else{
lwin+=1;
if(lwin==winscore11){
if(lwin-hwin<2)//判断分差是否大于等于2
winscore11++;
else{
cout<<hwin<<":"<<lwin<<endl;
hwin=0;
lwin=0;
winscore11=11;
}
}
}
}
if(hwin!=0||lwin!=0) //如果最后一局没结束,打印最后一局的结果
cout<<hwin<<":"<<lwin<<endl;
else
cout<<"0:0"<<endl; //如果结束,输出0:0;
cout<<endl;
hwin=0; //重置数据
lwin=0;
for(int k=0;k<i;++k){ //21分赛制的结果
if(list[k]=='W'){
hwin+=1;
if(hwin==winscore21){
if(hwin-lwin<2)//判断分差是否大于等于2
winscore21++;
else{
cout<<hwin<<":"<<lwin<<endl;
hwin=0;
lwin=0;
winscore21=21;
}
}
}
else{
lwin+=1;
if(lwin==winscore21){
if(lwin-hwin<2)//判断分差是否大于等于2
winscore21++;
else{
cout<<hwin<<":"<<lwin<<endl;
hwin=0;
lwin=0;
winscore21=21;
}
}
}
}
if(hwin!=0||lwin!=0) //如果最后一局没结束,打印最后一局的结果
cout<<hwin<<":"<<lwin<<endl;
else
cout<<"0:0"<<endl; //如果结束,输出0:0;
return 0;
}
接下来说说我做的时候的思维难点 :
写完代码,提交,发现十个检查点过了四个,开始检查题目逻辑。
1.我第一步是卡在了比分差必须大于等于二,我没理解这句话的意思,还以为是大的对局比分,后面去查了下乒乓球规则才明白(不玩乒乓球导致的)。这步修改完过了8个检查点
2.然后我发现我少了第一个数据就是E的情况,加上,过了九个检查点
3.最后一个是我找最久的,我没想到在
if(hwin!=0||lwin!=0) //如果最后一局没结束,打印最后一局的结果
cout<<hwin<<":"<<lwin<<endl;
else
cout<<"0:0"<<endl; //如果结束,输出0:0;
这里能出问题,我的原代码是
if(hwin!=0||lwin!=0) //如果最后一局没结束,打印最后一局的结果
cout<<hwin<<":"<<lwin<<endl;
然后最后抱着试一试的心态,把最后就算一把都没有了还是要输出0:0的情况加上,然后过了!!!离谱!!!
by——2023.11.4刷题记录
文章讲述了作者在解决NOIP2003普及组乒乓球问题时遇到的编程挑战,包括理解比赛规则、完善代码逻辑,特别是处理不同赛制和比赛结束条件。
https://www.luogu.com.cn/problem/P1042
451

被折叠的 条评论
为什么被折叠?



