药店卖药设计使利润最大

请设计代码实现问题。
你是一家药店的老板,这个月你从供货商手里收到了一批共50个药品, 其中每个药品有独立的进价和保
质期,其中进价的区间为[20,30]元,保质期的剩余天数为[1,15]天 你每天可以陈列出10个药品在商店中
售卖,每天会有三个顾客各过来购买一个药品。 药品的定价只能为商品进价加上{-1.5,-1, -0.5, 0, 2 ,4 ,6}
元,不得随意定价。 每位顾客购买的逻辑是,买其中最便宜的药品,如果说最便宜的药品价格一致则购
买保质期⻓的药品。 三位顾客会依次购买药品。 药品如果没有陈列在商店中,而是存放在仓库时,会
收取管理费,其中保质期低于5天的每天收取1元管理费,其余的每天收取0.5元。
每天的陈列药品可以少于10个
你的目标是,10天之后,你的利润(售出商品售价总和-售出商品进价总和-支付仓库的管理费用-10天内过期/丢弃商品的进价)最大。
要求
能够完整的模拟整个流程,给定药品的进价以及保质期,给定每天陈列的药品,可以直接得到商家的利润;能够自己制定每天展示的药品策略,给定一定的进价和保质期的药品,能够自己指定策略,得到利润;代码逻辑清晰,条理清楚;
为了能够模拟商家和顾客的行为,正确的得到收益。 给出10个测试用例,每个测试用例中包含两个文件,一个是药品的文件(内含50行,每行包含进价和保质期), 药品id按照输入顺序从0~49;另一个是每天的策略(内含10行,每行包含10组数据,每组数据中包含一个药品的id, 和定价列表的索引,id=-1代表空缺) 第三个文件中包含每天要丢弃的药品,内含N行,每行中包含两个数字,第一个是指第几天,第二个是指丢弃的药品索引
最好能写在命令行参数中,如下:
./drugstore.exe -m ../data/data1/medicine.txt -s ../data/data1/strategy.txt -ddelete.txt
需要自己制定每天卖出的策略,得到自认为收益最好的方法要求策略能够正确的实施,要能够将策略输出到文件,输出的格式与第一步给出的策略的格式要一样, 除了要输出每天要指定的策略,还要输出每天要丢弃的药品列表,同样如流程一中的文件格式 该步骤一样会给10个用例
希望能在命令行参数实现相关功能,如下:
./drugstore.exe -m ../data/data1/medicine.txt -ws ../data/data1/strategy.txt -wd
../data/data1/delete.txt
实验测试数据如下:https://pan.baidu.com/s/1kubZcXcQmiTaAv2sijKHVQ?pwd=vwqj 提取码:vwqj

数学建模,线性规划,编程拟合即可。为啥用c++,用python,pandas+sklearn几行搞定。
c++光读取csv就得写一坨。

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/736910
  • 除此之外, 这篇博客: 简单的桶排序:初级桶排序(1)中的 这是一个简单的桶排序,桶排序就是先开一个足够大的数组全部赋值为0表示一次都没有出现然后将数据输入,在输入的时候将数字对应的数组中的数据加一,表示出现了几次。注意:这个简单的桶排序需要知道排序的范围。当要排序的范围非常非常大的时候就不要用这个方法了,因为当排序范围非常大的时候这个方法就变得很浪费空间。而且这个简单的桶排序方法只是针对整数范围并且知道排序范围而且范围比较小的情况。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include<iostream>
    #include<stdio.h>
    using namespace std;
    
    int main(){
    	int num[1001] = {0},n,number;
    	cin>>n;			//输入数据的个数 
    	for(int i=0;i<n;i++){
    		cin>>number;
    		num[number]++;
    	}
    	//依次遍历从1000到0的桶 
    	for(int i=1000;i>0;i--){
    		for(int j=1;j<=num[i];j++){
    			cout<<i<<" ";			//出现了几次就打印几次 
    		} 
    	}
    	return 0; 
    } 

     

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
为了求解药店卖药的最大利润,可以采用动态规划的思路来解决。对于每天陈列的药品,考虑在顾客购买的过程中选择合适的卖价,使得自己的利润最大。具体而言,考虑每个药品的定价的7个选项,枚举后对于当前的十个药品进行排列组合,计算出所有可能的销售情况,选取售价最高的销售情况作为当天的销售策略。同时,对于超出10个的药品需要将其存放在仓库中,其中保质期低于5天的药品每天收取1元的管理费,其余的每天收取0.5元的管理费。当有药品过期时,需要丢弃该药品,同时需考虑药品过期前的售价和进价的影响,以及仓库管理费的影响。

代码实现如下:
如果我的回答解决了您的问题,请采纳!

该回答引用ChatGPT
题目分析:
这是一道模拟题,需要模拟药店的运营过程,包括药品的进货、陈列、销售、管理费用、丢弃等过程。同时,需要设计一种策略,使得药店的利润最大化。
具体实现:
1. 读取药品文件和策略文件,将药品信息和策略信息存储在相应的数据结构中。
2. 模拟每天的运营过程,包括陈列药品、顾客购买、管理费用、丢弃等过程。
3. 设计一种策略,使得药店的利润最大化。可以采用贪心算法,每天选择进价最低、保质期最长的药品进行陈列和销售。
4. 输出每天的策略和丢弃的药品列表。
代码实现:
python
import argparse
import copy
# 读取药品文件
def read_medicine_file(medicine_file):
medicines = []
with open(medicine_file, 'r') as f:
for line in f:
price, days = line.strip().split()
medicines.append({'price': int(price), 'days': int(days)})
return medicines
# 读取策略文件
def read_strategy_file(strategy_file):
strategies = []
with open(strategy_file, 'r') as f:
for line in f:
strategy = []
for s in line.strip().split():
if s == '-1':
strategy.append(None)
else:
strategy.append(int(s))
strategies.append(strategy)
return strategies
# 计算药品的售价
def calculate_price(price):
return [price-1.5, price-1, price-0.5, price, price+2, price+4, price+6]
# 计算药品的利润
def calculate_profit(sold, medicines, expired):
total_profit = 0
total_price = 0
total_cost = 0
for i in range(len(sold)):
if sold[i] is not None:
total_profit += sold[i]['price'] - medicines[i]['price']
total_price += sold[i]['price']
total_cost += medicines[i]['price']
for i in expired:
total_cost += medicines[i]['price']
return total_profit - total_cost
# 模拟每天的运营过程
def simulate_day(medicines, strategies, expired, day):
# 陈列药品
displayed = []
for i in range(len(strategies[day])):
if strategies[day][i] is not None:
displayed.append({'id': strategies[day][i], 'price': calculate_price(medicines[strategies[day][i]]['price']), 'days': medicines[strategies[day][i]]['days']})
# 顾客购买
sold = [None] * len(medicines)
for i in range(3):
min_price = float('inf')
min_days = float('inf')
min_index = -1
for j in range(len(displayed)):
if displayed[j] is not None and displayed[j]['price'][0] < min_price:
min_price = displayed[j]['price'][0]
min_days = displayed[j]['days']
min_index = j
elif displayed[j] is not None and displayed[j]['price'][0] == min_price and displayed[j]['days'] > min_days:
min_days = displayed[j]['days']
min_index = j
if min_index != -1:
sold[displayed[min_index]['id']] = {'price': displayed[min_index]['price'][0], 'days': displayed[min_index]['days']}
displayed[min_index]['price'].pop(0)
displayed[min_index]['days'] -= 1
if displayed[min_index]['days'] < 0:
expired.append(displayed[min_index]['id'])
displayed[min_index] = None
# 计算管理费用
management_fee = 0
for i in range(len(medicines)):
if medicines[i]['days'] < 5:
management_fee += 1
else:
management_fee += 0.5
# 计算利润
profit = calculate_profit(sold, medicines, expired)
return displayed, sold, expired, profit, management_fee
# 设计策略
def design_strategy(medicines):
strategies = []
for i in range(10):
strategy = [None] * 10
remaining_medicines = copy.deepcopy(medicines)
for j in range(10):
if len(remaining_medicines) == 0:
break
min_price = float('inf')
min_days = float('inf')
min_index = -1
for k in range(len(remaining_medicines)):
if remaining_medicines[k]['price'] < min_price:
min_price = remaining_medicines[k]['price']
min_days = remaining_medicines[k]['days']
min_index = k
elif remaining_medicines[k]['price'] == min_price and remaining_medicines[k]['days'] > min_days:
min_days = remaining_medicines[k]['days']
min_index = k
if min_index != -1:
strategy[j] = min_index
remaining_medicines.pop(min_index)
strategies.append(strategy)
return strategies
# 输出策略和丢弃的药品列表
def output_result(strategies, expired):
with open('result_strategy.txt', 'w') as f:
for strategy in strategies:
for s in strategy:
if s is None:
f.write('-1 ')
else:
f.write(str(s) + ' ')
f.write('\
')
with open('result_delete.txt', 'w') as f:
for e in expired:
f.write(str(e[0]) + ' ' + str(e[1]) + '\
')
# 主函数
def main(medicine_file, strategy_file, delete_file):
# 读取药品文件和策略文件
medicines = read_medicine_file(medicine_file)
strategies = read_strategy_file(strategy_file)
# 模拟每天的运营过程
expired = []
total_profit = 0
for i in range(10):
displayed, sold, expired, profit, management_fee = simulate_day(medicines, strategies, expired, i)
total_profit += profit - management_fee
# 设计策略
new_strategies = design_strategy(medicines)
# 输出策略和丢弃的药品列表
output_result(new_strategies, expired)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('-m', '--medicine', help='medicine file path')
parser.add_argument('-s', '--strategy', help='strategy file path')
parser.add_argument('-d', '--delete', help='delete file path')
args = parser.parse_args()
main(args.medicine, args.strategy, args.delete)

参考文献:
无。