PAT乙 1020 月饼(GO实现)

解题思路:
1.获取每个商品的单价
2.按照单价排序
3.先满足单价最高的,依次递减。直到需要的数量被填满,或者所有商品的库存为0

package main

import (
	"fmt"
	"sort"
)

type Product struct {
	stock float64
	price float64
	average float64
}
type Products []Product

func (p Products) Len() int {
	return len(p)
}
func (p Products) Less(i, j int) bool {
	return p[i].average > p[j].average
}
func (p Products) Swap(i, j int)  {
	p[i], p[j] = p[j], p[i]
}

func  main() {
	var n, d int
	var p Products
	_, _ = fmt.Scanf("%d %d", &n, &d)
	p = make(Products, n)
	for i:=0; i<n; i++ {
		_, _ = fmt.Scanf("%f", &p[i].stock)
	}
	for i:=0; i<n; i++ {
		_, _ = fmt.Scanf("%f", &p[i].price)
		p[i].average = p[i].price / p[i].stock
	}
	sort.Sort(p)

	j := 0
	sum := 0.0
	for d > 0 && j < n {
		if d >= int(p[j].stock) {
			d = d - int(p[j].stock)
			sum += p[j].price
		} else {
			sum += p[j].average * float64(d)
			d = 0
		}
		j++
	}
	fmt.Printf("%.2f", sum)
}

这里用go实现,简单来说就是获取输入,用一个结构体来存储库存,价格,单价,然后按照单价排序。下一步是关键,一个循环,直到需求为0或者所有的商品库存为0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值