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个整数,表示每个连队最终获得的物资数量。
上一题
下一题