乒乓球比赛判断胜负
鄙人小白,在线求助大佬,谢谢题目是乒乓球比赛规则规定在一局比赛中,先得11分的一方为胜方,10平后,先多得2分的一方为胜方。也就是说十分后一定要领先2分,才算胜方,比如11:10不行,要继续比赛直到一方获胜。现请你写一段程序来判断一局比赛的胜负。
输入:只有一行,为用空格分隔的两个整数m,n(0<=m,n<=200),依次代表A选手和B选手的得分。
输出:
只有一行,如果A获胜则输出A win,如果B获胜则输出B win,如果无法判断胜负(比如7:8),则输出no result,如果出现不可能出现的比分(比如13:5),则输出error。
#include <stdio.h>
#include <math.h>
int main()
{
int m,n;
scanf("%d%d",&m,&n);
if(m>=0&&m<=200&&n>=0&&n<=200)
{
if(m==11&&n<10||m>11&&n<m&&fabs(m-n)==2)
{
printf("A win");
}
else if(n==11&&m<10||n>11&&m<n&&fabs(n-m)==2)
{
printf("B win");
}
else if(fabs(m-n)<2)
{
printf("no result");
}
else
{
printf("error");
}
}
else
{
printf("error");
}
return 0;
}
我写的是上面这个,有错误吗?一直通过不了学校OJ,谢谢解答 本帖最后由 xieglt 于 2020-10-23 18:18 编辑
代码没问题,只是不够简洁。修改了一下,你看看可以不
#include <stdio.h>
#include <math.h>
int main()
{
int m,n;
scanf("%d%d",&m,&n);
if(m>=0&&m<=200&&n>=0&&n<=200)
{
//比分差 < 2 或者 两得分都 < 11判定为 no result
if(fabs(m-n) < 2 || (m < 11 && n < 11))
{
printf("no result");
}
//比分差 > 2 且有一个得分 > 11 判定为输入错误
else if(fabs(m-n) > 2 && (m > 11 || n >11))
{
printf("error");
}
else if(m > n)
{
printf("A Win");
}
else
{
printf("B Win");
}
}
else
{
printf("error");
}
return 0;
} xieglt 发表于 2020-10-23 17:30
代码没问题,只是不够简洁。修改了一下,你看看可以不
这个有问题,第二个error的里面,比分差大于2,且有一个大于11,若m为10,n为12的话,应该是B win.所以说存在错误 今天下午又想了一下,原来我写的那个代码存在逻辑上的错误,导致第三种No result的情况中不包含类似于7和3的情况
正确的应该是:#include <stdio.h>
#include <math.h>
int main()
{
int m,n;
scanf("%d%d",&m,&n);
if(m>=0&&m<=200&&n>=0&&n<=200)
{
if(m==11&&n<10||m>11&&n<m&&fabs(m-n)==2)
{
printf("A win");
}
else if(n==11&&m<10||n>11&&m<n&&fabs(n-m)==2)
{
printf("B win");
}
else if(fabs(m-n)<2||m<11&n<11)
{
printf("no result");
}
else
{
printf("error");
}
}
else
{
printf("error");
}
return 0;
} Chris599 发表于 2020-10-24 00:24
这个有问题,第二个error的里面,比分差大于2,且有一个大于11,若m为10,n为12的话,应该是B win.所以说 ...
12-10=2,怎么会大于2 xieglt 发表于 2020-10-24 01:02
12-10=2,怎么会大于2
是我错了,。。。
你的是对的
页:
[1]