程序功能:计算月饼的最大收益。\n\n设计思路及结构说明:\n1. 定义一个结构体Mooncake,结构体包含月饼的库存、价格和单价。\n2. 定义一个比较函数cmp,用于将月饼按照单价从高到低排序。\n3. 主函数main首先读取输入的月饼种类数N和需求量D。\n4. 创建一个大小为N的vector,用于存储N种月饼的信息。\n5. 循环读取N个月饼的库存,并计算每种月饼的单价。\n6. 使用sort函数对月饼vector进行排序,按照单价从高到低排序。\n7. 初始化收益profit为0.0。\n8. 循环遍历月饼vector,如果当前月饼的库存小于等于需求量D,则将该月饼的价格加入收益profit,同时将需求量D减去该月饼的库存。\n9. 如果当前月饼的库存大于需求量D,则将该月饼的单价乘以需求量D加入收益profit,并结束循环。\n10. 输出收益profit,保留两位小数。\n\n代码示例:\ncpp\n#include <iostream> // 月饼\n#include <vector>\n#include <algorithm>\nusing namespace std;\nstruct Mooncake {\n double stock;\n double price;\n double unitPrice;\n};\nbool cmp(Mooncake a, Mooncake b) {\n return a.unitPrice > b.unitPrice;\n}\nint main() {\n int N, D;\n cin >> N >> D;\n vector<Mooncake> mooncakes(N);\n for (int i = 0; i < N; i++) {\n cin >> mooncakes[i].stock;\n }\n for (int i = 0; i < N; i++) {\n cin >> mooncakes[i].price;\n mooncakes[i].unitPrice = mooncakes[i].price / mooncakes[i].stock;\n }\n sort(mooncakes.begin(), mooncakes.end(), cmp);\n \n double profit = 0.0;\n for (int i = 0; i < N; i++) {\n if (mooncakes[i].stock <= D) {\n profit += mooncakes[i].price;\n D -= mooncakes[i].stock;\n } else {\n profit += mooncakes[i].unitPrice * D;\n break;\n }\n }\n printf("%.2f\n", profit);\n return 0;\n}\n

C++ 月饼最大收益算法:贪心策略实现

原文地址: https://www.cveoy.top/t/topic/qaHt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录