算是写一下题解,一共六项作业,,除了最后一个最长回文子串都写了,,,我得留点时间给高数作业
环境:
go version go1.15.2 linux/amd64
wsl Arch
vscode + goimport
在线题解: 我的blog
lv0 -“hello, world!”
Golang版本的hello world,有种写C++的错觉
package main
import "fmt"
func main() {
fmt.Println("hello, world!")
}
lv1 -A Simple Calculator
input:
1
+
2
output:
3
输入分三行降低了处理输入数据的难度(其实并没有)
package main
import "fmt"
func cal(a int, cal string, b int) int {
switch cal {
case "+":
return a + b
case "-":
return a - b
case "*":
return a * b
case "/":
return a / b
default:
return 0
}
}
func main() {
var a, b int
var sig string
// fmt.Scanln(&a, &sig, &b)
fmt.Scanln(&a)
fmt.Scanln(&sig)
fmt.Scanln(&b)
fmt.Println(cal(a, sig, b))
}
感觉写的好丑……一点也不优雅
lv2 -Password Verifier
咱也不会异常啥的,,往简单里写,,水了水
package main
import "fmt"
func main() {
user := make(map[string]string)
user["root"], user["vonhyou"] = "toor", "plmokn"
fmt.Print("login:")
var username, pwd string
fmt.Scanln(&username)
pwd, ok := user[username]
if ok {
fmt.Print("password:")
fmt.Scanln(&pwd)
if pwd == user[username] {
fmt.Println("Welcome", username)
} else {
fmt.Println("Wrong password!")
}
} else {
fmt.Println("User does not exist!")
}
}
lv3 -Get The Largest Number
应该是为了让大家熟悉for循环
写lv3p的时候发现maxn有个小bug
就是flag的初始值给的是假想无穷小,,好久没写代码忘了好多东西啊
package main
import "fmt"
func maxn(arr []int, n int) int {
var flag int = arr[0]
for i := 1; i < n; i++ {
if arr[i] > flag {
flag = arr[i]
}
}
return flag
}
func main() {
var n int
a := make([]int, 10)
fmt.Scanln(&n)
for i := 0; i < n; i++ {
fmt.Scanf("%d", &a[i])
}
// fmt.Println(a)
fmt.Println(maxn(a, n))
// fmt.Println(a[:n])
}
lv3plus -Sort!
本来搞OI那会排序算法都忘得差不多了,,现在又让写
索性学了学基数排序,实现了一下,,不知道有没有bug
package main
import "fmt"
func maxn(arr []int, n int) int {
var flag int = arr[0]
for i := 1; i < n; i++ {
if arr[i] > flag {
flag = arr[i]
}
}
return flag
}
func insSort(a []int, exp int, n int) {
for i := 1; i < n; i++ {
flag := a[i]
j := i - 1
for j >= 0 && a[j]/exp < flag/exp {
a[j+1] = a[j]
j--
}
a[j+1] = flag
}
}
func radixSort(a []int, n int) {
mxn := maxn(a, n)
mxExp := 1
for mxn >= 10 {
mxn /= 10
mxExp *= 10
}
for i := 1; i != mxExp; i *= 10 {
insSort(a, i, n)
}
}
func main() {
var n int
a := make([]int, 10)
fmt.Scanln(&n)
for i := 0; i < n; i++ {
fmt.Scanf("%d", &a[i])
}
radixSort(a, n)
fmt.Println(a[:n])
}
吐槽:go有好多大括号啊,,,,丑死了,,咋和rust一个德行
懂了,,之前的幻像(感觉像是写C++)是错的,,写go和写rust一样憋屈,,,,,(来自被ruby惯坏的过期薯条)
关于基排的具体实现,可以看Wiki
lv4 -“hello, world!” Web version
package main
import "github.com/gin-gonic/gin"
func main() {
method := func(c *gin.Context) {
c.String(200, "hello, world!")
}
r := gin.Default()
r.GET("/", method)
r.Run()
}
引用了gin这个包,,还有上来就匿名函数的嘛,,,
这里用goland的确方便一点点,但是vscode也差不到哪儿去
主要是新建项目的时候goland可以直接选择go mod
lv5 -Longest Palindromic Substring
也不是不能写暴力,,但是状态一般,,,
留下wiki的链接有时间再看把,,,Manacher当时就没太搞懂
- Wikipedia Implemented by Java and it has Pseudocode
Concluding Remarks
基本就这样吧,,吐槽归吐槽,,有作业引导的确比自学有效率
学长答疑也很耐心,十分感谢!
唔,,从后端开始,向全栈(full stack)进发!!
PREVIOUSSolutions for Pasting codes
NEXT艹艹艹,,,我以后再也不喝酒了