写题记录-卖月饼
这个题比较简单,没有特别多的弯弯绕绕,唯一要走注意的就是,题目中没有说每个月饼的单价,我们需要先计算出每个月饼的单价,然后根据单价从贵到便宜依次销售,以此达到最大收益。没啥好说的,直接贴代码:
package main
import (
"fmt"
"sort"
)
type Mooncake struct {
univalent float64
stock float64
price float64
}
func main() {
var species, need int
n, _ := fmt.Scan(&species, &need)
if n != 2 {
return
}
mooncakes := make([]Mooncake, species)
for i := 0; i < species; i++ {
fmt.Scan(&mooncakes[i].stock)
}
for i := 0; i < species; i++ {
fmt.Scan(&mooncakes[i].price)
mooncakes[i].univalent = mooncakes[i].price / mooncakes[i].stock
}
sort.Slice(mooncakes, func(i, j int) bool {
return mooncakes[i].univalent > mooncakes[j].univalent
})
var Profit float64 = 0
var remainDemand = float64(need)
for i := range mooncakes {
if remainDemand == 0 {
break
}
// sellAmount := min(mooncakes[i].stock, float64(remainDemand))
// Profit += sellAmount * mooncakes[i].univalent
// remainDemand -= int(sellAmount)
if remainDemand >= mooncakes[i].stock {
Profit += mooncakes[i].price
remainDemand -= mooncakes[i].stock
} else if remainDemand < mooncakes[i].stock {
Profit += mooncakes[i].univalent * remainDemand
remainDemand = 0
}
}
fmt.Printf("%.2f\n", Profit)
}