Map(汇合)
Map 是一种无序的键值对的汇合。Map 最重要的一点是通过 key 来疾速检索数据,key 相似于索引,指向数据的值。
Map 是一种汇合,所以咱们能够像迭代数组和切片那样迭代它。不过,Map 是无序的,咱们无奈决定它的返回程序,这是因为 Map 是应用 hash 表来实现的。
申明变量,默认 map 是 nil
var hash map[int]int
应用 make 函数
hash:=make(map[int]int)
实例:
country:=make(map[string]string)
country["China"] = "中国"
country["Japan"] = "日本"
fmt.Println(country) //map[China: 中国 Japan: 日本]
delete
country:=make(map[string]string)
country["China"] = "中国"
country["Japan"] = "日本"
delete(country,"Japan")
fmt.Println(country) //map[China: 中国
递归函数
递归,就是在运行的过程中调用本人。
实例 1:阶乘
var i int =5
fmt.Println(factorial(i)) //120
func factorial(n int)int{
if n>0{return n*factorial(n-1)
}
return 1
}
实例 2:生成斐波那契数列
var i int = 5
fmt.Println(fibonacci(i)) //5
func fibonacci(n int)int{
if n<2{return n}
return fibonacci(n-1)+fibonacci(n-2)
}
var user Users
user = new(User)
user.call()
user = new(Vip)
user.call()
type Users interface {call()
}
type User struct {
}
type Vip struct {
}
func (vip,Vip) call() {fmt.Println("Vip User")
}
func (user User) call() {fmt.Println("User")
}
错误处理
Go 语言通过内置的谬误接口提供了非常简单的错误处理机制。
result, err:= Sqrt(-1)
if err != nil {fmt.Println(err)
}
定义报错接口
type error interface {Error() string
}
func Sqrt(f float64) (float64, error) {
if f < 0 {return 0, errors.New("不能为正数")
}
return error
}
GOlang 练习题
1. 四个数进行排列组合。
有 1、2、3、4 这四个数字,能组成多少个互不雷同且无反复数字的三位数?都是多少?
func threeTotal()int{
ret:=0
for i:=1;i<5;i++{
for k:=1;k<5;k++{
for j:=1;j<5;j++{
if i!=k && k!=j && j!=i{
ret++
fmt.Println("组成的组合有 i =",i,",k=",k,",j=",j)
}
}
}
}
return ret
}
threeTotal() //24
// 组成的组合有 i = 1 ,k= 2 ,j= 3
// 组成的组合有 i = 1 ,k= 2 ,j= 4
// 组成的组合有 i = 1 ,k= 3 ,j= 2
// 组成的组合有 i = 1 ,k= 3 ,j= 4
// 组成的组合有 i = 1 ,k= 4 ,j= 2
// 组成的组合有 i = 1 ,k= 4 ,j= 3
// 组成的组合有 i = 2 ,k= 1 ,j= 3
// 组成的组合有 i = 2 ,k= 1 ,j= 4
// 组成的组合有 i = 2 ,k= 3 ,j= 1
// 组成的组合有 i = 2 ,k= 3 ,j= 4
// 组成的组合有 i = 2 ,k= 4 ,j= 1
// 组成的组合有 i = 2 ,k= 4 ,j= 3
// 组成的组合有 i = 3 ,k= 1 ,j= 2
// 组成的组合有 i = 3 ,k= 1 ,j= 4
// 组成的组合有 i = 3 ,k= 2 ,j= 1
// 组成的组合有 i = 3 ,k= 2 ,j= 4
// 组成的组合有 i = 3 ,k= 4 ,j= 1
// 组成的组合有 i = 3 ,k= 4 ,j= 2
// 组成的组合有 i = 4 ,k= 1 ,j= 2
// 组成的组合有 i = 4 ,k= 1 ,j= 3
// 组成的组合有 i = 4 ,k= 2 ,j= 1
// 组成的组合有 i = 4 ,k= 2 ,j= 3
// 组成的组合有 i = 4 ,k= 3 ,j= 1
// 组成的组合有 i = 4 ,k= 3 ,j= 2
2. 企业发放的奖金依据利润提成的计算
企业发放的奖金依据利润提成。利润 (I) 低于或等于 10 万元时,奖金可提成 10%;利润高于 10 万元,低于 20 万元,低于 10 万元的局部按 10% 提成,高于 10 万元的局部,可提成 7.5%。20 万到 40 万之间时,高于 20 万元的局部,可提成 5%;40 万到 60 万之间时高于 40 万元的局部,可提成 3%;60 万到 100 万之间时,高于 60 万元的局部,可提成 1.5%,高于 100 万元时,超过 100 万元的局部按 1% 提成。从键盘输入当月利润 I,求应发放奖金总数?
func fundSum()float32 {
var I float32 = 0.0
var bonus float32 = 0.0
fmt.Print("输出利润:")
fmt.Scanf("%f\n", &I)
switch{
case I > 1000000:
bonus = (I - 1000000) * 0.01
I = 1000000
fallthrough
case I > 600000:
bonus += (I - 600000) * 0.015
I = 600000
fallthrough
case I > 400000:
bonus += (I - 400000) * 0.03
I = 400000
fallthrough
case I > 200000:
bonus += (I - 200000) * 0.05
I = 200000
fallthrough
case I > 100000:
bonus += (I - 100000) * 0.075
I = 100000
fallthrough
default:
bonus += I * 0.1
}
fmt.Printf("奖金总额为 %f\n",bonus)
return bonus
}
fundSum()
// 输出利润:888222
// 奖金总额为 37823.328125
3. 计算齐全平方数
一个整数,它加上 100 后是一个齐全平方数,再加上 168 又是一个齐全平方数,请问该数是多少?
func perfectSqure()int{
i:=0
for {x :=int(math.Sqrt(float64(i+100)))
y :=int(math.Sqrt(float64(i+100+168)))
if x*x ==(i+100) && y*y == (i+100+168){fmt.Printf("该数是 %d\n",i)
return i
}
i++
}
}
fmt.Println(perfectSqure()) // 该数是 21
4. 数字从小到大排序
输出三个 整数 x,y,z,请把这三个数由小到大输入。
func threeCompare(){
var a,b,c int=0,0,0
fmt.Scanf("%d%d%d",&a,&b,&c)
if a>b {a,b = b,a}
if a>c{a,c = c,a}
if b>c{b,c = c,b}
fmt.Printf("%d<%d<%d",a,b,c)
}
threeCompare()
//2123 23232 123
//123<2123<23232
5. 打印字母 C。
func printC(){
var a, b = 176, 219
fmt.Printf("%c%c%c%c%c%c%c%c \n", a, a, b, b, b, a, a,a)
fmt.Printf("%c%c%c%c%c%c%c%c \n", a, b, a, a, a, b, a,a)
fmt.Printf("%c%c%c%c%c%c%c%c \n", a, b, a, a, a, a, a,a)
fmt.Printf("%c%c%c%c%c%c%c%c \n", a, b, a, a, a, a, a,a)
fmt.Printf("%c%c%c%c%c%c%c%c \n", a, a, b, a, a, b, a,a)
fmt.Printf("%c%c%c%c%c%c%c%c \n", a, a, a, b, b, a, a,a)
}
printC()
6. 找出数组中的侥幸数
在整数数组中,如果一个整数的呈现频次和它的数值大小相等,咱们就称这个整数为「侥幸数」。给你一个整数数组 arr,请你从中找出并返回一个侥幸数。
package main
import "fmt"
func main() {nums := []int{1,2,3,4}
ret:=find132pattern(nums)
fmt.Println(ret)
}
func findLucky(arr []int) int {
// 定义哈希变量
hash:=make(map[int]int)
for _,j:=range arr{
// 记录元素呈现的次数
hash[j]++
}
ret:=-1
for i,j:=range hash{
// 找到最大次数和值相等的状况
if i==j && ret<i{ret=i}
}
return ret
}