diff --git "a/homework/week4/GO11036\350\265\265\351\221\253\351\276\231/work1.go" "b/homework/week4/GO11036\350\265\265\351\221\253\351\276\231/work1.go" new file mode 100644 index 0000000000000000000000000000000000000000..e71bbe62acbae22b8abde451cf0e5cb2016013ff --- /dev/null +++ "b/homework/week4/GO11036\350\265\265\351\221\253\351\276\231/work1.go" @@ -0,0 +1,13 @@ +package main + +func main() { + //s1 := make([]int, 3, 4) + //s2 := append(s1, 1) + //Q: 请问s1,s2内各有什么元素? + //A: s1内有[0,0,0],s2内有[0,0,0,1] + //Q:s1修改一个元素会影响s2吗? s2修改一个元素会影响s1吗 + //A: 在不扩容的情况下,s1修改元素会影响到s2,s2修改元素会影响到s1 + //Q:s2在增加一个元素会怎么样 + //A:s1 [0,0,0] s2[0,0,0,2] + // +} diff --git "a/homework/week4/GO11036\350\265\265\351\221\253\351\276\231/work2.go" "b/homework/week4/GO11036\350\265\265\351\221\253\351\276\231/work2.go" new file mode 100644 index 0000000000000000000000000000000000000000..8c8e8e4cb1ae5348d19205ea2283883e4d72690e --- /dev/null +++ "b/homework/week4/GO11036\350\265\265\351\221\253\351\276\231/work2.go" @@ -0,0 +1,16 @@ +package main + +import "fmt" + +// 有一个数组[1, 4, 9, 16, 2, 5, 10, 15],生成一个新的切片,要求新切片元素是数组 +// 相邻两项的和 +func main() { + arr := [...]int{1, 4, 9, 16, 2, 5, 10, 15} + + s := make([]int, len(arr)-1) + + for i := 0; i < len(s); i++ { + s[i] = arr[i] + arr[i+1] + } + fmt.Println(s) +} diff --git "a/homework/week4/GO11036\350\265\265\351\221\253\351\276\231/work3.go" "b/homework/week4/GO11036\350\265\265\351\221\253\351\276\231/work3.go" new file mode 100644 index 0000000000000000000000000000000000000000..b54b6c2199b4041992d78c987784c887f8c3fe90 --- /dev/null +++ "b/homework/week4/GO11036\350\265\265\351\221\253\351\276\231/work3.go" @@ -0,0 +1,32 @@ +package main + +import ( + "fmt" + "math/rand" + "sort" + "time" +) + +//随机产生100个整数 +//数字的范围[-200,200] +//升序输出这些生成的数字并打印其重复次数 + +func main() { + s := make([]int, 0, 100) + m := make(map[int]int) + + rand.Seed(time.Now().UnixNano()) + for i := 0; i < 100; i++ { + r := rand.Intn(400) - 200 + s = append(s, r) + m[r]++ + } + sort.Ints(s) + fmt.Println("升序排列生成的随机数:\n", s) + //fmt.Println(m) + for num, count := range m { + if count > 1 { + fmt.Printf("重复的随机数:%-7d重复次数:%d\n", num, count) + } + } +} diff --git "a/homework/week5/GO11036\350\265\265\351\221\253\351\276\231/main.go" "b/homework/week5/GO11036\350\265\265\351\221\253\351\276\231/main.go" new file mode 100644 index 0000000000000000000000000000000000000000..d96788e82b04473a50ddf490e56b222d4ea9b6cc --- /dev/null +++ "b/homework/week5/GO11036\350\265\265\351\221\253\351\276\231/main.go" @@ -0,0 +1,62 @@ +package main + +import ( + "fmt" +) + +// 第一种阶乘计算方式 +func factorial1(n uint64) uint64 { + if n <= 0 { + return 1 + } + return n * factorial1(n-1) +} + +// 第一种优化,缓存版阶乘计算方式 +var m = make(map[uint64]uint64, 100) + +func factorial2(n uint64) uint64 { + if n <= 0 { + return 1 + } + if _, ok := m[n]; !ok { + m[n] = n * factorial1(n-1) + } + return m[n] +} + +// todo: 第三种实现方式 +//func factorial3(n int) int { +// +//} + +func trigonometry(n int) { + for i := 1; i <= n; i++ { + for j := 1; j <= n-i; j++ { + if j > 3 { + fmt.Print(" ") + } else { + fmt.Print(" ") + } + } + for k := i; k >= 1; k-- { + if k >= 10 { + fmt.Printf("%-3d", k) + } else { + fmt.Printf("%-2d", k) + } + } + fmt.Println() + } +} + +func main() { + fmt.Println("--------------------work1------------------------") + fmt.Println("-----------------第一种实现方式------------------") + fmt.Println(factorial1(10)) + fmt.Println("-----------------第二种实现方式------------------") + fmt.Println(factorial2(10)) + fmt.Println("--------------------work2------------------------") + trigonometry(12) + +}