OD统一考试(C卷)
分值: 200分
题解: Java / Python / C++
题目描述
- 老李是货运公司承运人,老李的货车额定载货重量为wt;
- 现有两种货物,货物A单件重量为wa,单件运费利润为pa,货物B单件重量为wb,单件运费利润为pb;
- 老李每次发车时载货总重量刚好为货车额定载货重量wt,车上必须同时有货物A和货物B,货物A、B不可切割;
- 老李单车次满载运输可获得的最高利润是多少。
输入描述
第一列输入为货物A的单件重量wa,0 < wa < 10000
第二列输入为货物B的单件重量wb,0 < wb < 10000
第三列输入为货车的额定载重wt,0 < wt < 100000
第四列输入为货物A的单件运费利润pa,0 < pa < 1000
第五列输入为货物B的单件运费利润pb,0 < pb < 1000
输出描述
单次满载运输的最高利润
示例1
输入:
10 8 36 15 7
输出:
44
示例2
输入:
1 1 2 1 1
输出:
2
题解
题目要求:
- 车次满载;
- 同时有货物A和货物B 且 货物A、B不可切割;
解题思路:
- 计算货物 A 最多可以装的个数,即
n = (wt + wa - 1) / wa
。- 使用循环枚举货物 A 的个数
ca
,范围为 [1, n)。这样保证有剩余空间用于装货物 B。- 判断车整好满载的条件为
(wt - wa * ca) % wb == 0
,如果满足,则计算货物 B 的个数cb
。- 更新最高利润
maxProfit
。- 输出最终结果
maxProfit
。
Java
import java.util.Scanner;
/**
* @author code5bug
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取输入值
int wa = scanner.nextInt(), wb = scanner.nextInt();
int wt = scanner.nextInt();
int pa = scanner.nextInt(), pb = scanner.nextInt();
int maxProfit = 0;
int n = (wt + wa - 1) / wa; // 货物 A 最多可以装的个数
for (int ca = 1; ca < n; ca++) { // 枚举装货物 A 的个数 ca: [1, n), 这样就可以保证有剩余空间
if ((wt - wa * ca) % wb == 0) { // 车整好满载
int cb = (wt - wa * ca) / wb; // 货物 B 的个数
maxProfit = Math.max(maxProfit, ca * pa + cb * pb);
}
}
System.out.println(maxProfit);
}
}
Python
wa, wb, wt, pa, pb = map(int, input().split())
max_profit = 0
n = (wt + wa - 1) // wa # 货物 A 最多可以装的个数
for ca in range(1, n): # 枚举装货物 A 的个数 ca: [1, n), 这样就可以保证有剩余空间
if (wt - wa * ca) % wb == 0: # 车整好满载
cb = (wt - wa * ca) // wb # 货物 B 的个数
max_profit = max(max_profit, ca * pa + cb * pb)
print(max_profit)
C++
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
// 读取输入值
int wa, wb, wt, pa, pb;
cin >> wa >> wb >> wt >> pa >> pb;
int maxProfit = 0;
int n = (wt + wa - 1) / wa; // 货物 A 最多可以装的个数
for (int ca = 1; ca < n; ca++) { // 枚举装货物 A 的个数 ca: [1, n), 这样就可以保证有剩余空间
if ((wt - wa * ca) % wb == 0) { // 车整好满载
int cb = (wt - wa * ca) / wb; // 货物 B 的个数
maxProfit = max(maxProfit, ca * pa + cb * pb);
}
}
cout << maxProfit << endl;
return 0;
}
❤️华为OD机试面试交流群(每日真题分享): 加V时备注“华为od加群”
🙏整理题解不易, 如果有帮助到您,请给点个赞 ❤️ 和收藏 ⭐,让更多的人看到。🙏🙏🙏