30分蒟蒻求大佬帮助 T T 到底为什么RE啊

P1042 [NOIP2003 普及组] 乒乓球

```cpp else if((a>=11||b>=11)&&fabs(a-b)>=2){ a = 0; b = 0; printf("%d:%d\n",a,b); ``` 每一次对局结束后要给a,b归零 **PS:不要用goto,单独加一个变量作为两层循环跳出的判断条件就够了** ```cpp int end = 0; int i,j; for(i=0;end!=1;i++) for(j=0;end!=1;j++) if(***) end = 1; ``` 而且每一次小循环里的for(j=0;;j++)都会跑j=0语句,不需要for(i=0;;i++,j=0)
by bridgeL @ 2019-12-31 14:09:07


@[bridgeL](/user/254631) 多谢多谢,已经按大佬说的改了,但是还是过不去。 如果先归零再输出的话永远都会输出0呀?,enmmmmm我想的是因为判断一局打完的时候已经又读入了一个字符,所以要继续判断是W或L,然后让a=1 b=0或a=0 b=1?
by PureJoy @ 2020-01-01 10:19:31


@[PureJoy](/user/272820) 你已经按照你的猜想试过了吗?还是RE吗?贴一下新的代码
by bridgeL @ 2020-01-02 17:02:05


@[bridgeL](/user/254631) 现在是这样的,之前那个在本地能过,传上来就不行了。 ``` #include<stdio.h> #include<math.h> char record[30][2500]; int main() { int i=0,j=0; char s; s=getchar(); while(s!='E'){ if(s!='\n'){ record[i][j++]=s; }else{ record[i][j++]='\n'; i++; j=0; } s=getchar(); } record[i][j++]='E'; int a=0,b=0,flag=1; for(i=0;flag;i++){ for(j=0;record[i][j]!='\n'&&flag;j++){ if(record[i][j]=='E'){ printf("%d:%d\n\n",a,b); flag=0; break; } else if(a<11&&b<11&&record[i][j]=='W') a++; else if(a<11&&b<11&&record[i][j]=='L') b++; else if((a>=11||b>=11)&&fabs(a-b)<2&&record[i][j]=='W') a++; else if((a>=11||b>=11)&&fabs(a-b)<2&&record[i][j]=='L') b++; else if((a>=11||b>=11)&&fabs(a-b)>=2){ printf("%d:%d\n",a,b); if(record[i][j]=='W'){ a=0; b=0; } else if(record[i][j]=='L'){ a=0; b=0; } } } } a=0; b=0; flag=1; for(i=0;flag=1;i++){ for(j=0;record[i][j]!='\n'&&flag=1;j++){ if(record[i][j]=='E'){ printf("%d:%d\n",a,b); flag=0; break; } else if(a<21&&b<21&&record[i][j]=='W') a++; else if(a<21&&b<21&&record[i][j]=='L') b++; else if((a>=21||b>=21)&&fabs(a-b)<2&&record[i][j]=='W') a++; else if((a>=21||b>=21)&&fabs(a-b)<2&&record[i][j]=='L') b++; else if((a>=21||b>=21)&&fabs(a-b)>=2){ printf("%d:%d\n",a,b); if(record[i][j]=='W'){ a=0; b=0; } else if(record[i][j]=='L'){ a=0; b=0; } } } } return 0; }
by PureJoy @ 2020-01-04 01:31:58


RE是因为行列存反了,WA是因为21分制的逻辑关系不对:( 但是我改了一遍后,现在也是本地对了提交上去就WA。。。我也不知道咋回事了。。。 ``` #include<stdio.h> #include<math.h> char record[2500][30] = {0}; int main() { int i=0,j=0; char s; s=getchar(); while(s!='E') { if(s!='\n') record[i][j++]=s; else { record[i][j++]='\n'; i++; j=0; } s=getchar(); } record[i][j++]='E'; int a=0,b=0,flag=1; for(i=0;flag;i++) { for(j=0;record[i][j]!='\n'&&flag;j++) { // 判断循环结束 if(record[i][j]=='E') { printf("%d:%d\n\n",a,b); flag=0; break; } // 根据W/L加分 if(record[i][j]=='W') a++; else b++; // 判决本局胜负 if(a>=11||b>=11) { if(a-b>=2) { printf("%d:%d\n",a,b); a = 0; b = 0; } else if(b-a>=2) { printf("%d:%d\n",a,b); a = 0; b = 0; } } } } a=0; b=0; flag=1; for(i=0;flag;i++) { for(j=0;record[i][j]!='\n'&&flag;j++) { if(record[i][j]=='E') { printf("%d:%d\n",a,b); flag=0; break; } if(record[i][j]=='W') a++; else b++; if(a>=21||b>=21) { if(a-b>=2) { printf("%d:%d\n",a,b); a = 0; b = 0; } else if(b-a>=2) { printf("%d:%d\n",a,b); a = 0; b = 0; } } } } return 0; } ``` 加油吧!
by bridgeL @ 2020-01-04 10:56:11


@[bridgeL](/user/254631) (抱拳)谢大佬!
by PureJoy @ 2020-01-04 12:22:46


|