数字游戏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;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!【以下回答由 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,我们就找到了最多的相加次数。
接下来,我们可以根据以上思路,编写代码实现该功能。
【相关推荐】