先发一下我的源码
#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")就过了???