C语言/数据结构贪心算法题解:超市货架商品排列——最多能卖出多少件商品?

发布时间:2026/8/12 20:53:29
C语言/数据结构贪心算法题解:超市货架商品排列——最多能卖出多少件商品? 问题描述在一个超市里有一个包含 $n$ 个格子的货物架每个格子中放有一种商品商品用小写字母a到z表示。当顾客进入超市时他们会依次从第一个格子查找到第 $n$ 个格子寻找自己想要购买的商品。如果在某个格子中找到该商品顾客就会购买它该商品立即被移除格子变为空并离开如果中途遇到一个空格子或查找完所有格子还没有找到想要的商品顾客也会离开。作为超市管理员你可以在顾客到来之前重新调整商品的顺序。调整规则如下你只能重新排列现有商品不能添加或移除商品可以改变商品在架子上的位置包括留下空格即某些格子可以为空调整后商品的总数和种类保持不变当第一个顾客进入后商品位置不能再调整。你需要计算在最优调整下最多可以卖出多少件商品。输入变量说明n货物架的格子数m顾客想要购买的商品种类数s货物架上商品的初始顺序长度为 $n$ 的字符串c顾客想要购买的商品种类长度为 $m$ 的字符串程序代码#include stdio.h#include string.hint maxSales(int n, int m, char* s, char* c) {int shelf[26] {0}; // 货架上每种商品的数量int need[26] {0}; // 顾客需要的每种商品数量int result 0;// 统计货架商品for (int i 0; i n; i) {shelf[s[i] - a];}// 统计顾客需求for (int i 0; i m; i) {need[c[i] - a];}// 计算最多能卖出的数量for (int i 0; i 26; i) {if (shelf[i] 0 need[i] 0) {result (shelf[i] need[i] ? shelf[i] : need[i]);}}return result;}int main() {printf(%d\n, maxSales(3, 4, abc, abcd)); // 预期输出: 3printf(%d\n, maxSales(4, 2, abbc, bb)); // 预期输出: 2printf(%d\n, maxSales(5, 4, bcdea, abcd)); // 预期输出: 4return 0;}#include stdio.h #include string.h int maxSales(int n, int m, char* s, char* c) { int shelf[26] {0}; // 货架上每种商品的数量 int need[26] {0}; // 顾客需要的每种商品数量 int result 0; // 统计货架商品 for (int i 0; i n; i) { shelf[s[i] - a]; } // 统计顾客需求 for (int i 0; i m; i) { need[c[i] - a]; } // 计算最多能卖出的数量 for (int i 0; i 26; i) { if (shelf[i] 0 need[i] 0) { result (shelf[i] need[i] ? shelf[i] : need[i]); } } return result; } int main() { printf(%d\n, maxSales(3, 4, abc, abcd)); // 预期输出: 3 printf(%d\n, maxSales(4, 2, abbc, bb)); // 预期输出: 2 printf(%d\n, maxSales(5, 4, bcdea, abcd)); // 预期输出: 4 return 0; }运行结果