题解 | #猜数#

猜数

http://www.nowcoder.com/practice/3eb9a66c7fa24b90845271f6b80b7092

这道题目想想稍微有些难,但转换为代码后有十分简短。
来讲讲我的思路:
1.先找出行域范围:1<=a,b<=x且a+b=y
2.接着直接数a,a从1数到x,也就是说左边的数字a从1开始数,要满足b=y-a<=x,即a>=y-x,则a的下界为max(1,y-x)
3.最多又只能数到x,此时得到上届,为x,但又不能超过y,因此a的上届为min(x,y),且还要把存在了相等的情况去掉(比如a=b的情况)
4.去掉了之后再除以2,去除重复的情况。
下面贴代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    long x, y;
    cin >>x>>y;
    if(x>=y) cout<<(y-1)/2<<endl;
    else
    {
        if(x<y/2) cout <<0<<endl;
        else cout <<x-y/2<<endl;
    }
    return 0;
}

谢谢支持鸭!

全部评论
高 实在是高
点赞 回复 分享
发布于 2021-08-02 18:30

相关推荐

伟大的烤冷面被普调:暨大✌🏻就是强
点赞 评论 收藏
分享
尊尼获获:闺蜜在哪?
点赞 评论 收藏
分享
评论
3
收藏
分享
牛客网
牛客企业服务