golang刷题acm模式中的字符串输入方法

平均绩点——字符串输入方法

题目描述

每门课的成绩分为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()
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值