文章目录
- 水果摊小买卖
水果摊小买卖
- 小王手里有点闲钱,想做点水果买卖,给出两个数组m, n, m[i]表示第i个水果的成本价,n[i]表示第i个水果能卖出的价格;
- 假如现在有本钱k,试问最后最多能赚多少钱?
- 每种水果只能买一次,只能卖一次;
- m,n <= 50
- 数组元素为正整数,不超过1000;
输入描述:
第一行输入数组m
第二行输入数组n
第三行输入本钱k
输出描述:
最多能赚到多少钱(包含本钱)
示例1
输入:
4,2,6,4
5,3,8,7
15
输出:
22
python实现:
- 贪心算法;
- 计算每个水果的利润率,并降序排序;
- 优先购买利润高的水果(直到本钱不够买下一个水果),并将卖的钱累加到本钱中,尽可能地将所有的水果都买卖一次;
- visit数组用来标记每个水果是否已参与买卖;
# 输入数据
m = list(map(int, input().strip().split(",")))
n = list(map(int, input().strip().split(",")))
k = int(input().strip())# 计算每种水果的利润,并降序排序
earn_rate = []
for i in range(len(m)):earn_rate.append([i, (n[i] - m[i]) / m[i]])
# 利率降序
earn_rate.sort(key=lambda i: -i[1])# 记录每种水果是否已买卖过
visit = [0 for _ in range(len(m))]
profit = []
while True:i = 0while i < len(earn_rate):# 当前商品jj = earn_rate[i][0]# 当前商品未买卖且本钱足够if visit[j] == 0 and m[j] <= k:k -= m[j]profit.append(n[j])visit[j] = 1 # 标记已买卖i += 1# 挣的钱累加到本钱中if len(profit) > 0:for x in profit:k += xprofit = []else:breakprint(k) # 连同本钱一起挣到的钱