用go 语言实现 查找图书 将给定的若干本图书的信息(书号、书名、定价)按输入的先后顺序加入到一个单链表中。然后遍历单链表,寻找并输出价格最高的图书信息。若存在相同的定价,则按原始顺序全部输出。 输入格式: 首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试的第一行输入正整数n,表示有n本不同的书。接下来n行分别输入一本图书的信息。其中,书号由长度等于6的纯数字构成;而书名则由长度不超过50且不含空格的字符串组成,价格包含2位小数。 输出格式: 对于每组测试,输出价格最高的图书信息(书号、书名、定价),数据之间用一个空格隔开,定价的输出保留2位小数。 输入样例: 1 4 023689 DataStructure 26.50 123456 FundamentalsOfDataStructure 76.00 157618 FundamentalsOfC++Language 24.10 057618 OpereationSystem 76.00
时间: 2024-03-07 12:48:44 浏览: 18
好的,以下是用 Go 语言实现查找图书的代码。
在本题中,需要读入多组数据,因此我们可以通过 for 循环来实现。对于每组数据,我们可以使用一个结构体来保存每本书的信息,然后将这些结构体按输入顺序加入到一个单链表中。最后遍历单链表,找到价格最高的图书并输出即可。
```go
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Book struct {
id string
name string
price float64
next *Book
}
func main() {
reader := bufio.NewReader(os.Stdin)
// 读入测试数据的组数
var T int
fmt.Fscan(reader, &T)
for t := 0; t < T; t++ {
// 读入每组测试数据
var n int
fmt.Fscan(reader, &n)
var head *Book = nil
var tail *Book = nil
for i := 0; i < n; i++ {
// 读入一本书的信息
var id, name string
var priceStr string
fmt.Fscan(reader, &id, &name, &priceStr)
// 将价格转换为浮点数
price, _ := strconv.ParseFloat(priceStr, 64)
// 创建一个 Book 对象
book := &Book{id, name, price, nil}
// 将 book 加入到单链表中
if head == nil {
head = book
tail = book
} else {
tail.next = book
tail = book
}
}
// 遍历单链表,找到价格最高的图书
maxPrice := 0.0
var maxBooks []*Book
for book := head; book != nil; book = book.next {
if book.price > maxPrice {
maxPrice = book.price
maxBooks = []*Book{book}
} else if book.price == maxPrice {
maxBooks = append(maxBooks, book)
}
}
// 输出所有价格最高的图书
for _, book := range maxBooks {
fmt.Printf("%s %s %.2f\n", book.id, book.name, book.price)
}
}
}
```
输入样例:
```
1
4
023689 DataStructure 26.50
123456 FundamentalsOfDataStructure 76.00
157618 FundamentalsOfC++Language 24.10
057618 OpereationSystem 76.00
```
输出样例:
```
123456 FundamentalsOfDataStructure 76.00
057618 OpereationSystem 76.00
```