题解 | #成绩排序#

成绩排序

https://www.nowcoder.com/practice/8e400fd9905747e4acc2aeed7240978b

package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
	"strconv"
	"strings"
)

type Student struct {
	Name   string
	Record int
	Index  int
}

type StudentSlice []Student

func (x StudentSlice) Len() int { return len(x) }
func (x StudentSlice) Less(i, j int) bool {
	if x[i].Record == x[j].Record {
		return x[i].Index < x[j].Index
	}
	return x[i].Record < x[j].Record
}
func (x StudentSlice) Swap(i, j int) { x[i], x[j] = x[j], x[i] }

func main() {
	var n, sortFlag int
	if _, err := fmt.Scan(&n); err != nil {
		return
	}

	if _, err := fmt.Scan(&sortFlag); err != nil {
		return
	}

	var studentSlice = make([]Student, 0)
	scanner := bufio.NewScanner(os.Stdin)
	for i := 0; i < n; i++ {
		for scanner.Scan() {
			str := scanner.Text()
			strSli := strings.Fields(str)
			if len(strSli) != 2 {
				return
			}

			var cur Student
			var err error
			cur.Index = i
			cur.Name = strSli[0]
			if cur.Record, err = strconv.Atoi(strSli[1]); err != nil {
				return
			}

			studentSlice = append(studentSlice, cur)
			break
		}
	}

	if sortFlag == 0 {
		sort.Slice(studentSlice, func(i, j int) bool {
			if studentSlice[i].Record == studentSlice[j].Record {
				return studentSlice[i].Index < studentSlice[j].Index
			}
			return studentSlice[i].Record > studentSlice[j].Record
		})
	} else if sortFlag == 1 {
		sort.Sort(StudentSlice(studentSlice))
	} else {
		return
	}

	for _, val := range studentSlice {
		fmt.Printf("%s %d\n", val.Name, val.Record)
	}
}

全部评论

相关推荐

VirtualBoo...:都去逗他了?
点赞 评论 收藏
分享
Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务