题解 | #奖学金#

奖学金

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
                }
            }
        }
    }
}
全部评论

相关推荐

被普调的六边形战士很高大:项目经历貌似和专业或者求职方向没大关系?
点赞 评论 收藏
分享
04-29 22:35
门头沟学院 Java
牛友说改了名字能收到offer:旧图新发查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务