C++ 解決章魚燒銷售問題:高桥君的烦恼
首先,我们需要将题目中的条件和要求转化为程序的逻辑。\n\n题目中提到的条件有:\n1. 高桥君不想卖事先做好的章鱼烧。\n2. 如果只卖刚做好的章鱼烧,卖得好的数量会减少。\n3. 如果让客人等待太久,客人会离开。\n\n题目中的要求是:\n在给定的时间内,能否销售完所有的章鱼烧。\n\n根据以上条件和要求,我们可以设计以下算法来解决这个问题:\n\n1. 将所有章鱼烧的烤制时间按照升序排序。\n2. 将所有顾客的到达时间按照升序排序。\n3. 使用两个指针i和j分别指向章鱼烧和顾客的数组的开头。\n4. 当i和j都没有到达数组末尾时,进行以下判断:\n - 如果顾客j到达的时间大于章鱼烧i的烤制时间加上T秒,则客人等待时间过长,输出"no"。\n - 如果顾客j到达的时间小于等于章鱼烧i的烤制时间,则该顾客可以买到章鱼烧,将i和j分别向后移动一位。\n - 如果顾客j到达的时间大于章鱼烧i的烤制时间加上T秒,则该顾客无法买到章鱼烧,将i向后移动一位。\n5. 如果i到达了章鱼烧数组的末尾,说明所有的章鱼烧都已经卖完,输出"yes";否则,输出"no"。\n\n下面是具体的C++代码实现:\n\ncpp\n#include <iostream>\n#include <vector>\n#include <algorithm>\n\nusing namespace std;\n\nstring sellTakoyaki(int T, vector<int>& takoyakiTimes, vector<int>& customerArrivals) {\n sort(takoyakiTimes.begin(), takoyakiTimes.end());\n sort(customerArrivals.begin(), customerArrivals.end());\n \n int i = 0; // 指向章鱼烧的指针\n int j = 0; // 指向顾客的指针\n \n while (i < takoyakiTimes.size() && j < customerArrivals.size()) {\n if (customerArrivals[j] > takoyakiTimes[i] + T) {\n // 顾客等待时间过长,无法买到章鱼烧\n i++;\n } else if (customerArrivals[j] <= takoyakiTimes[i]) {\n // 顾客可以买到章鱼烧\n i++;\n j++;\n } else {\n // 顾客需要等待\n j++;\n }\n }\n \n if (i == takoyakiTimes.size()) {\n // 所有章鱼烧都卖完\n return "yes";\n } else {\n // 有章鱼烧没卖完\n return "no";\n }\n}\n\nint main() {\n int T; \n cin >> T; \n \n int N; \n cin >> N; \n vector<int> takoyakiTimes(N); \n for (int i = 0; i < N; i++) {\n cin >> takoyakiTimes[i]; \n } \n \n int M; \n cin >> M; \n vector<int> customerArrivals(M); \n for (int i = 0; i < M; i++) {\n cin >> customerArrivals[i]; \n } \n \n string result = sellTakoyaki(T, takoyakiTimes, customerArrivals); \n cout << result << endl; \n \n return 0; \n} \n\n\n这段代码首先读取了输入的T、N、M三个数值,分别表示烤制时间的上限、章鱼烧数量和顾客数量。然后读取了N个章鱼烧的烤制时间和M个顾客的到达时间。接着调用sellTakoyaki函数来判断能否在给定时间内销售完所有的章鱼烧,并输出结果。\n\n注意:以上代码假设输入是合法的,即N和M的取值范围都符合题目要求,并且输入的烤制时间和到达时间都是非负整数。在实际应用中,可能还需要对输入进行一些边界检查和错误处理。
原文地址: https://www.cveoy.top/t/topic/pHB3 著作权归作者所有。请勿转载和采集!