2 条题解
-
0
#include <cstdio> // 包含标准输入输出库 using namespace std; int main() { // 定义变量:n表示需要买的铅笔数量 long long int n; // 定义三种包装的铅笔信息: // a1, b1, c1 分别表示三种包装每包的数量 // a2, b2, c2 分别表示三种包装每包的价格 long long int a1, a2, b1, b2, c1, c2; // as, bs, cs 分别表示购买三种包装所需的总花费 long long int as, bs, cs; // ans 存储最终的最小花费 long long int ans; cin >> n; // 输入需要购买的铅笔数量 cin >> a1 >> a2; // 输入第一种包装:每包数量和价格 cin >> b1 >> b2; // 输入第二种包装:每包数量和价格 cin >> c1 >> c2; // 输入第三种包装:每包数量和价格 // 计算第一种包装的花费 if (n % a1 == 0) { // 如果需要的数量正好能被每包数量整除 as = n / a1 * a2; // 总花费 = (铅笔总数÷每包数量)×每包价格 } else { // 如果不能整除 as = (n / a1 + 1) * a2; // 需要多买一包:总花费 = (铅笔总数÷每包数量+1)×每包价格 } // 计算第二种包装的花费(逻辑同上) if (n % b1 == 0) { bs = n / b1 * b2; } else { bs = (n / b1 + 1) * b2; } // 计算第三种包装的花费(逻辑同上) if (n % c1 == 0) { cs = n / c1 * c2; } else { cs = (n / c1 + 1) * c2; } // 比较三种包装的花费,找出最小值 if (as <= bs && as <= cs) { // 如果第一种花费是最小的 ans = as; } else if (bs <= as && bs <= cs) { // 如果第二种花费是最小的 ans = bs; } else { // 否则第三种花费是最小的 ans = cs; } cout << ans << endl; // 输出最小花费 return 0; }
解题思路 计算每种包装需要买多少包:
如果需要的铅笔数量能被包装数量整除(如需要20支,每包10支),那么直接计算:包数 = 需要数量 ÷ 每包数量
如果不能整除(如需要25支,每包10支),就要多买一包(买3包),因为不能拆包
计算每种包装的总花费:
总花费 = 需要买的包数 × 每包价格
例如:需要25支铅笔,第一种包装每包10支售价20元:
需要买3包(25÷10=2.5,向上取整为3包)
总花费 = 3 × 20 = 60元
比较三种包装的花费:
分别计算出三种包装的总花费后
找出其中最小的那个花费值
信息
- ID
- 688
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 13
- 已通过
- 5
- 上传者