转载
首先一定要开数组存胜负
因为你不仅要存胜负的场数,还要存胜负的顺序,以此来排分数。
其次分数差要大于2。
玩过乒乓球大部分人都知道,正规乒乓球比赛,不仅分数要大于11(或21),两者分数相差也要大于2。如果比赛分数达到11-10,比赛会继续。直到一个人比另外一个人多两分。(如13-11)
21分制同理
思路
把输入、11分制、21分制分而治之。只开了一个数组。初始值为0(开全局变量),当录到W赋值1(胜),录到L赋值2(负)。方便下面取用。
取用时,读到1,胜数++,读到二,负数++,按照上文判定来输出,读到0,表明记录结束了,输出之前剩余的分数即可。
代码如下
#include<iostream>
#include<cstring>
using namespace std;
int game[62503];
int main()
{
int w=0,l=0;
char s;
//输入处理
for(int i=0;cin>>s&&s!='E';i++){
if(s=='W') game[i]=1;
else game[i]=2;
}
//11分制
for(int i=0;;i++){
if(game[i]==1) w++;
if(game[i]==2) l++;
if(game[i]==0){
//游戏结束
cout<<w<<":"<<l<<endl<<endl;
w=0;
l=0;
break;
}
if(w-l>=2||l-w>=2){
if(w>=11||l>=11){
cout<<w<<":"<<l<<endl;
w=0;
l=0;
}
}
}
for(int i=0;;i++){
if(game[i]==1) w++;
else if(game[i]==2) l++;
if(game[i]==0){
//游戏结束
cout<<w<<":"<<l;
w=0;
l=0;
break;
}
if(w-l>=2||l-w>=2){
if(w>=21||l>=21){
cout<<w<<":"<<l<<endl;
w=0;
l=0;
}
}
}
return 0;
}