ECNU 2143 端午节快乐
链接
https://acm.ecnu.edu.cn/problem/2143
题目
单点时限: 2.0 sec
内存限制: 256 MB
今天是端午节,ECNU 决定请大家吃粽子。恰好,今天超市为了迎合 ” 端午节 “,推出了 ” 端午大酬宾 “,即促销活动。严格的买三送一,买五送二。
ECNU 想用现有的钱,买最多的粽子,但是他自己又不会算,所以希望你能帮帮他。
输入格式
输入第一行为一个数 , 表示测试数据的组数。
每组测试数据有两个整数, 表示 ECNU 有 元钱,每个粽子价格为 元钱,超市推出了买 5 个送 2 个,和买 3 个送 1 个的活动。
输出格式
输出 ECNU 最多能买到的粽子数量。
样例
input
2
10 3
22 3
output
4
9
提示
有两组测试数据:
对于第一组测试数据:有10元钱,粽子3元一个,可以买3个,但是买3送1,所以最后有4个。
对于第二组测试数据:有22元钱,粽子3元一个,可以买7个,但是买5送2,所以最后有9个。
思路
可以说是贪心算法,优先想凑最高优惠,不行再用次级优惠,
这里直接用一个f函数,套一下就行了。
代码
public static int f(int a, int b, int num) {
if (a >= 5 * b) {
return f(a - 5 * b, b, num + 7);
} else if (a >= 3 * b) {
return f(a - 3 * b, b, num + 4);
} else {
return num + a / b;
}
}
public static void fun() {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println(f(a, b, 0));
}
}