题解 | #成绩排序#
成绩排序
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) } }