测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A17131. 根据地物资分配方案(二维数组 + 贪心分配)

填空题 中等

题目描述

根据地物资分配方案(二维数组 + 贪心分配)

题目描述

西柏坡根据地有 5 个连队、4 种物资(粮食、弹药、药品、被服)。管理员按以下规则分配物资:

先输入 5 个连队的基础需求(每行 4 个整数:粮、弹、药、被)

再输入根据地每种物资的总库存(4 个整数)

分配规则:

每种物资优先满足所有连队的基础需求

若库存有剩余,按连队编号 1→5 依次平分剩余物资(整数分配,余数忽略)

输出每个连队最终获得的 4 种物资数量

输入格式

前 5 行:每行 4 个整数(连队基础需求,1≤需求≤50)

最后 1 行:4 个整数(物资总库存,≥各需求总和)

输出格式

5 行,每行 4 个整数:连队最终物资

参考答案

#include <iostream> using namespace std; int main() { int need[5][4], stock[4], ans[5][4]; // 输入需求 for (int i = 0; i > need[i][j]; // 输入库存 for (int j = 0; j > stock[j]; // 分配 for (int j = 0; j < 4; j++) { int sum_need = 0; for (int i = 0; i < 5; i++) sum_need += need[i][j]; int rest = stock[j] - sum_need; int add = rest / 5; for (int i = 0; i < 5; i++) ans[i][j] = need[i][j] + add; } // 输出 for (int i = 0; i < 5; i++) { for (int j = 0; j < 4; j++) { if (j) cout << " "; cout << ans[i][j]; } cout << endl; } return 0; }

答案解析

1. 读取5行数据,每行4个整数,存储为二维数组,表示各连队对4种物资的基础需求。

2. 读取第6行4个整数,表示每种物资的总库存。

3. 计算每种物资的基础需求总量,与库存对比,确保库存不小于需求总和。

4. 初始化结果数组,初始值为各连队基础需求。

5. 对每种物资,计算库存减去所有连队基础需求后的剩余量。

6. 若有剩余,按连队编号从1到5依次分配,每个连队分得剩余量整除5的整数部分,余数舍弃。

7. 将分配结果累加到对应连队的该物资数量上。

8. 重复步骤5-7处理全部4种物资。

9. 输出5行,每行4个整数,表示每个连队最终获得的物资数量。

上一题 下一题