这个题目有几个注意的地方。。
- 乒乓球比赛在11分制的情况下,当一个选手的比分大于等于11分且两人的分差大于等于2分才决出胜负。比如甲乙的比分分别是 11:10,那么虽然甲到了11分,但是还不算赢,还要加时,一直到双方分差大于等于2才算赢。比如11:9,那么甲赢。13:11,甲赢.。那么21分制同理。
- 存放W,L的数组要开的足够大,不然拿不到满分
下面是小刘的代码,试了三次才满分。写的不是很好,没有优化,仅供参考。想了一下实际上只需要一个数组就足够了,,,
#include<stdio.h>
#include<algorithm>
#pragma warning(disable:4996) //这是忽略scanf返回值警告,devc不需要写这个,vs要写,否则scanf就会报错
char s[100001];
int c11[100001][2]; //存放所有11分制下的比分 ,c11[i][0]放的是huahua的分数,c11[i][1]放的是lili的分数
int c21[100001][2]; //存放所有21分制下的比分
int c11_count = 0; //11分制下的大比分的数量
int c21_count = 0; //21分制下大比分的数量
int main()
{
int i = 0;
int huahua_11= 0; //华华在11分制下的比分
int lili_11 = 0; //李李在11分制下的比分
int huahua_21 = 0;
int lili_21 = 0;
for (i = 0;;i++)
{
scanf("%c",&s[i]);
if (s[i] == 'E')
break;
}
i = 0;
while (s[i] != 'E')
{
if (s[i] == 'W') //如果是W,则华华加1分
{
huahua_11 += 1;
huahua_21 += 1;
}
else if(s[i]=='L') //如果是L,李李加一分
{
lili_11+= 1;
lili_21+= 1;
}
if ((huahua_11 >= 11 || lili_11 >= 11) && abs(huahua_11 - lili_11) >= 2) //当有一个人分数大于等于11分同时两人的分差大于2分。
{
c11[c11_count][0] = huahua_11; //华华的分数给保存下来
c11[c11_count][1] = lili_11;
c11_count++;
huahua_11 = lili_11 = 0; //11分制下的分数重新计算
}
if ((huahua_21 >= 21 || lili_21 >= 21) && abs(huahua_21 - lili_21) >= 2) //当有一个人的分数大于等于21分同时两人的分差大于2分
{
c21[c21_count][0] = huahua_21;//华华的分数给保存下来
c21[c21_count][1] = lili_21; //lili的分数给保存下来
c21_count++;
huahua_21 = lili_21 = 0; //21分制下的分数重新计算
}
i++;
}
//还有不足一把比赛的比分 ,最后一把是没有分出胜负的的,还是把分数记录下来
c11[c11_count][0] = huahua_11;
c11[c11_count][1] = lili_11;
c21[c21_count][0] = huahua_21;
c21[c21_count][1] = lili_21;
for (int i = 0; i <= c11_count; i++)
{
printf("%d:%d\n", c11[i][0], c11[i][1]);
}
printf("\n");
for (int i = 0; i <=c21_count; i++)
{
printf("%d:%d\n", c21[i][0], c21[i][1]);
}
return 0;
}