数字游戏,小明每次可以在|和r之间选一个数和a相加

数字游戏2
描述

小明有一个数字a,他每次可以在l,r之间挑选一个数和a相加,问最少几次相加,可以让a和b相等,最多需要多次,如果不可以则输出-1;

day15-01.zip

输入
第一行一个整数T(T<=10000),表示数据组数

每组数据有四个整数,a,b,l,r(1<=a<=b<=1e9,1<=l<=r<=1e9)

输出
每组数据一行结果,如果不能等于b,输出-1,如果可以输出最少次数和最多次数

输入样例 1

3
1 6 2 5
1 4 2 2
2 10 2 6
输出样例 1

1 2
-1
2 4
提示

第一组数据,增加一次的方案为直接加5,增加两次的方案为先加2再加

#include <iostream>
#include <algorithm>
using namespace std;
int main() {
    int T;
    cin >> T;
    while (T--) {
        int a, b, l, r;
        cin >> a >> b >> l >> r;
        if (a == b) {
            cout << "0 0" << endl;
            continue;
        }
        int min = (b - a + r - 1) / r;
        int max = (b - a + l - 1) / l;
        if (min * r < b - a || max * l > b - a) {
            cout << "-1" << endl;
        } else {
            cout << min << " " << max << endl;
        }
    }
    return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

【以下回答由 GPT 生成】

解决方案

这个问题可以通过穷举法解决。首先,我们要理解题目的意思。题目要求在区间[l, r]内选择一个数x,然后将x加到a上,使得a等于b。我们需要找到最少和最多的相加次数。

我们可以从最少相加次数的角度来思考。假设我们选择x=l,那么我们需要将l加到a上,直到a>=b为止。每次加完之后,更新a的值。直到a等于b,我们就找到了最少的相加次数。

最多相加次数的解决方法也类似。我们从最大的数r开始,每次将r加到a上,直到a>=b为止。每次加完之后,更新a的值。直到a等于b,我们就找到了最多的相加次数。

接下来,我们可以根据以上思路,编写代码实现该功能。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^