P1042 [NOIP2003 普及组] 乒乓球

在这里插入图片描述
这个题目有几个注意的地方。。

  • 乒乓球比赛在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;
}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值