洛谷p1042乒乓球 day1 11.20

先发一下我的源码


#include<stdio.h>

int win[1000000] = { 0 };
int w, l;
int main()
{
	int i;
	char s;
	for (int i = 1;(s=getchar()) && s != 'E'; i++)//循环读入,当读到字符E结束 
	{
		if (s!='W'&&s!='L') {
			i -= 1;
		continue;//这样应该能把、0删去
		}
		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则记录结束,输出记录结束前的分数。
		{
			printf("%d:%d\n", w, l);
			break;
		}
		if (w - l >= 2 || l - w >= 2)
			if (w >= 11 || l >= 11)//当双方比分相差大于2且一方分数大等于11输出 
			{
				printf("%d:%d\n", w, l);
				w = 0;//比分清零 
				l = 0;
			}
	}
	printf("\n");
	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)//soga这里是判断第一局都没有比赛满十一局的情况,直接打印出结果
		{
			printf("%d:%d\n", w, l);
			break;
		}
		if (w - l >= 2 || l - w >= 2)
			if (w >= 21 || l >= 21)//11变为21 
			{
				printf("%d:%d\n", w, l);
				w = 0;
				l = 0;
			}
	}
	return 0;
}

本题出了以下几个问题

1.刚开始用的scanf字符串,但是想了想不知到以后怎么去处理后来的“E”。

2.忽略了getchar会存入换行符的问题;

3.比分清零和空格问题;

4.&&符号和=赋值符号的优先级问题

但是还有一个疑问,为什么我考虑\0的时候用if(s=="\0")这个判断条件会wa,后来看了题解改成if(s!="E"&&s!="L")就过了???

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shix .

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值