用Golang刷ACM格式的OJ 笔记

为了让我记得更深刻<<<
恰逢遇到2023春招刷阿里、华为的机试题,采用ACM格式,自己构造输入输出,用golang敲了部分题后,做一部分的总结.

  1. 固定的输入格式(针对字符串型输入)
package main
import (
   "bufio"
   "os"
   "fmt"
)
func main(){
   
   input :=bufio.NewScanner(os.Stdin) // 多行输入
   // 注意测试用例过长的话,要先指定bufio的bufer ,不然input.Scan会失败,读取空
   // bufer :=make([]byte,2000*1024)  
   // input.Buffer(bufer,len(bufer))
   for input.Scan(){
    // 每调用一次Scan,从输入流中读取一行,相当于切换光标
   	str :=input.Text() // 获取这一行的输入
   	 ...
   }
}
1.1 strings包
   strings.IndexByte(str,byte) // 按照字符找位置
   strings.Index(str,string) //按照字符串找位置
   x :=[]rune(string) //将字符串转为切片
   str :=string(x) //切片转为字符串
   str :=fmt.Sprintf("%d个中国人吃%d个苹果",10,20) // 格式化字符串
1.2 strconv包
   data,_ :=strconv.Atoi(str) //将字符串转为int类型
   str,_ :=strconv.Itoa(int) //将整形转为string类型
   str,_ :=strconv.ToLower(string) //全转为小写
   //.ToUpper() //转为大写
   
   // 解析字符串为整数,可以带符号 (string,进制,intX)
   str,_ :=strconv.ParseInt("-2",10,64)
   
   //解析字符串为浮点型 (string,floatX) X表示32或者64
   str,_ :=strconv.ParseFloat("0.236",64)

1.3 sort包
   sort.Ints([]int) // 直接从小到大排序整形切片
1.4 ascii码
    48 表示 0
    65 表示 A
    97 表示 a
1.5 散列表
   除留余数法
   	H(key) = key % mod 就是把可能是很大的key转化为 不超过mod的整数。
   	将一堆key映射成下标范围在[0,mod]中,mod通常取素数
   	但是会出现key1和key2映射在同一个下标的情况,也就是出现冲突
   	冲突解决办法:
   	1)线性探测法
   		H(key) 冲突,则检测H
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ACM竞赛中,通常会有多组输入数据需要处理。根据给出的代码示例,可以看到输入数据有多组,每组数据以空格隔开的整数表示。每行的整数数量不固定,且不知道数量。输出需要求和的结果。 为了读取输入数据,你可以使用fmt包中的Scan函数,该函数可以读取从标准输入中获取的数据。 可以按照以下步骤来读取输入数据: 1. 使用fmt.Scan函数读取变量t,该变量表示每组数据中整数的数量。 2. 使用一个循环,该循环次数为t次,用来读取每个整数并求和。 3. 在循环中,使用fmt.Scan函数读取变量a,该变量表示当前要求和的整数。 4. 将读取的整数累加到sum变量中。 5. 循环结束后,输出sum变量的值。 下面是一个示例代码,用来实现上述步骤: ```go package main import ( "fmt" ) func main() { var t int for { var sum int n, _ := fmt.Scan(&t) if n == 0 { break } else { a := make([]int, t) for i := 0; i < t; i++ { fmt.Scan(&a[i]) } for i := 0; i < t; i++ { sum += a[i] } } fmt.Println(sum) } } ``` 此代码示例使用了一个无限循环来处理多组输入数据,直到输入的整数为0才退出循环。每次循环开始时,sum变量被重置为0,用来计算当前组数据的和。在内部循环中,通过make函数创建了一个切片a来存储每个整数,然后将每个整数累加到sum变量中。最后,输出sum变量的值。 希望这个回答对您有帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值