平均绩点——字符串输入方法
题目描述
每门课的成绩分为A、B、C、D、F五个等级,为了计算平均绩点,规定A、B、C、D、F分别代表4分、3分、2分、1分、0分。
输入
有多组测试样例。每组输入数据占一行,由一个或多个大写字母组成,字母之间由空格分隔。
输出
每组输出结果占一行。如果输入的大写字母都在集合{A,B,C,D,F}中,则输出对应的平均绩点,结果保留两位小数。否则,输出“Unknown”。
样例输入
A B C D F
B F F C C A
D C E F
样例输出
2.00
1.83
Unknown
答案
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
var (
scanner = bufio.NewScanner(os.Stdin)
writer = bufio.NewWriter(os.Stdout)
)
func main() {
defer writer.Flush()
m := map[string]int{"A": 4.0, "B": 3.0, "C": 2.0, "D": 1.0, "F": 0.0}
for {
boo := scanner.Scan()
if boo == false {
break
}
if err := scanner.Err(); err != nil {
break
}
input := scanner.Text()
keywordFrequency := make(map[string]int)
keywords := strings.Fields(input)
for _, keyword := range keywords {
if keyword != "" {
keywordFrequency[keyword]++
}
}
var sum float64 = 0
count := 0
flag := 1
for key, value := range keywordFrequency {
if _, ok := m[key]; ok {
count += value
sum += float64(m[key] * value)
} else {
flag = 0
}
}
if flag == 1 {
fmt.Fprintf(writer, "%.2f\n", sum/float64(count))
} else {
fmt.Fprintln(writer, "Unknown")
}
writer.Flush()
}
}
句子缩写——字符串输入方法
题目描述
输出一个词组中每个单词的首字母的大写组合。
输入
输入的第一行是一个整数n,表示一共有n组测试数据。(输入只有一个n,没有多组n的输入)
接下来有n行,每组测试数据占一行,每行有一个词组,每个词组由一个或多个单词组成;每组的单词个数不超过10个,每个单词有一个或多个大写或小写字母组成;
单词长度不超过10,由一个或多个空格分隔这些单词。
输出
请为每组测试数据输出规定的缩写,每组输出占一行。
样例输入
1
ad dfa fgs
样例输出
ADF
答案
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
var (
reader = bufio.NewReader(os.Stdin)
writer = bufio.NewWriter(os.Stdout)
)
func main() {
defer writer.Flush()
var n int
fmt.Fscanf(reader, "%d\n", &n)
for i := 0; i < n; i++ {
input, _ := reader.ReadString('\n') // 读取一行输入
words := strings.Fields(input) // 分割单词
abbreviation := make([]byte, 0) // 存储缩写
for _, word := range words {
if len(word) > 0 { // 跳过可能的空单词
if word[0] >= 'a' && word[0] <= 'z' {
abbreviation = append(abbreviation, word[0]-32) // 转换首字母为大写,并添加到缩写中
} else {
abbreviation = append(abbreviation, word[0])
}
}
}
fmt.Fprintln(writer, string(abbreviation)) // 输出缩写
}
writer.Flush()
}