鱼C论坛

 找回密码
 立即注册
查看: 1131|回复: 5

[已解决]乒乓球比赛判断胜负

[复制链接]
发表于 2020-10-23 17:21:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
鄙人小白,在线求助大佬,谢谢
题目是乒乓球比赛规则规定在一局比赛中,先得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,谢谢解答
最佳答案
2020-10-23 17:30:12
本帖最后由 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;
} 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-23 17:30:12 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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;
} 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-24 00:24:23 | 显示全部楼层
xieglt 发表于 2020-10-23 17:30
代码没问题,只是不够简洁。修改了一下,你看看可以不

这个有问题,第二个error的里面,比分差大于2,且有一个大于11,若m为10,n为12的话,应该是B win.所以说存在错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-24 00:25:59 | 显示全部楼层
今天下午又想了一下,原来我写的那个代码存在逻辑上的错误,导致第三种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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-24 01:02:32 From FishC Mobile | 显示全部楼层
Chris599 发表于 2020-10-24 00:24
这个有问题,第二个error的里面,比分差大于2,且有一个大于11,若m为10,n为12的话,应该是B win.所以说 ...

12-10=2,怎么会大于2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-24 08:53:31 | 显示全部楼层
xieglt 发表于 2020-10-24 01:02
12-10=2,怎么会大于2

是我错了,。。。
你的是对的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 20:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表