【正经题解】乒乓球
2024-02-20 18:16:46
发布于:浙江
19阅读
0回复
0点赞
首先一定要开数组存胜负
因为你不仅要存胜负的场数,还要存胜负的顺序,以此来排分数。
其次分数差要大于2。
玩过乒乓球大部分人都知道,正规乒乓球比赛,不仅分数要大于11(或21),两者分数相差也要大于2。如果比赛分数达到11-10,比赛会继续。直到一个人比另外一个人多两分。(如13-11)
21分制同理
搞完这些重点说思路
我的思路没有DALAO们这么复杂优秀。我是把输入、11分制、21分制分而治之。只开了一个数组。初始值为0(开全局变量),当录到W赋值1(胜),录到L赋值2(负)。方便下面取用。
取用时,读到1,胜数++,读到二,负数++,按照上文判定来输出,读到0,表明记录结束了,输出之前剩余的分数即可。
#include <iostream>
#include <cstring>
using namespace std;
int win[62503];
int w,l;
int main()
{
char s;
for(int i=1;cin>>s&&s!='E';i++)//循环读入,当读到字符E结束
{
if(s=='W')win[i]=1;
else win[i]=2;
}
//----------------11分制 ----------------
for(int i=1;1;i++)
{
if(win[i]==1)w++;//胜场+1
if(win[i]==2)l++;//负场+1
if(win[i]==0)//读到0则记录结束,输出记录结束前的分数。
{
cout<<w<<":"<<l<<endl<<endl;
break;
}
if(w-l>=2||l-w>=2)
if(w>=11||l>=11)//当双方比分相差大于2且一方分数大等于11输出
{
cout<<w<<":"<<l<<endl;
w=0;//比分清零
l=0;
}
}
w=0;//清零,为21分制计算做准备
l=0;
//----------------21分制 ----------------
for(int i=1;1;i++)//一切同上,唯一区别就是判定从11变为21
{
if(win[i]==1)w++;
if(win[i]==2)l++;
if(win[i]==0)
{
cout<<w<<":"<<l;
break;
}
if(w-l>=2||l-w>=2)
if(w>=21||l>=21)//11变为21
{
cout<<w<<":"<<l<<endl;
w=0;
l=0;
}
}
return 0;
}
这里空空如也
有帮助,赞一个