题解 | #奖学金#
奖学金
http://www.nowcoder.com/practice/cee98a512ec246a2918ea8121f7612c8
golang 贪心解法
package main
import (
"fmt"
"io"
"sort"
)
type score_hour struct {
score int
hour int
}
func main() {
var n, r, avg int
for {
_, err := fmt.Scan(&n, &r, &avg)
if err == io.EOF {
break
}
v := make([]score_hour, 0)
var temp score_hour
for n > 0 {
n--
fmt.Scan(&temp.score, &temp.hour)
v = append(v, temp)
}
// 需要的总分
target := len(v) * avg
// 当前成绩
score_cur := 0
time := 0
for i := 0; i < len(v); i++ {
score_cur += v[i].score
}
if score_cur >= target {
fmt.Println(0)
} else {
sort.Slice(v, func(i, j int) bool {
if v[i].hour < v[j].hour {
return true
}
return false
})
for i := 0; i < len(v); i++ {
// 该课程获得满分求当前总分数
score_cur += (r - v[i].score)
if score_cur >= target {
//当前分数超过目标成绩说明该课程不得满分也已经满足奖学金条件
score_cur -= (r - v[i].score)
time += (target - score_cur) * v[i].hour
fmt.Println(time)
break
} else {
time += (r - v[i].score) * v[i].hour
}
}
}
}
}
查看3道真题和解析