前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang语言(打卡第三天)map、递归、报错和练习题|Go主题月

Golang语言(打卡第三天)map、递归、报错和练习题|Go主题月

作者头像
微芒不朽
发布2022-09-13 10:03:17
2020
发布2022-09-13 10:03:17
举报

Map(集合)

Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。

声明变量,默认 map 是 nil

代码语言:javascript
复制
var hash map[int]int

使用 make 函数

代码语言:javascript
复制
hash:=make(map[int]int)

实例:

代码语言:javascript
复制
country:=make(map[string]string)
country["China"] = "中国"
country["Japan"] = "日本"
fmt.Println(country) //map[China:中国 Japan:日本]

delete

代码语言:javascript
复制
country:=make(map[string]string)
country["China"] = "中国"
country["Japan"] = "日本"
delete(country,"Japan")
fmt.Println(country) //map[China:中国

递归函数

递归,就是在运行的过程中调用自己。

实例1:阶乘

代码语言:javascript
复制
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:生成斐波那契数列

代码语言:javascript
复制
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)
}
代码语言:javascript
复制
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 语言通过内置的错误接口提供了非常简单的错误处理机制。

代码语言:javascript
复制
result, err:= Sqrt(-1)

if err != nil {
   fmt.Println(err)
}

定义报错接口

代码语言:javascript
复制
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 这四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

代码语言:javascript
复制
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,求应发放奖金总数?

代码语言:javascript
复制
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 又是一个完全平方数,请问该数是多少?

代码语言:javascript
复制
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,请把这三个数由小到大输出。

代码语言:javascript
复制
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。

代码语言:javascript
复制
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,请你从中找出并返回一个幸运数。

代码语言:javascript
复制
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 
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叫我詹躲躲 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Map(集合)
    • 实例:
      • delete
      • 递归函数
        • 实例1:阶乘
          • 实例2:生成斐波那契数列
          • 错误处理
            • 定义报错接口
            • GOlang练习题
              • 1.四个数进行排列组合。
                • 2.企业发放的奖金根据利润提成的计算
                  • 3.计算完全平方数
                    • 4.数字从小到大排序
                      • 5.打印字母 C。
                        • 6.找出数组中的幸运数
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档