Go面试编程题目(二)

161 篇文章 12 订阅

原文地址:Go面试编程题目(二)

1、实现以下功能?

根据工龄(整数)给员工涨工资(整数),工龄和基本工资通过键盘录入,涨工资的条件如下:

  1. [10-15) +5000

  2. [5-10) +2500

  3. [3~5) +1000

  4. [1~3) +500

  5. [0~1) +200

如果输入工龄为10,基本工资为3000,程序运行后打印为:【您目前工作了10年,基本工资为 3000元,应涨工资 5000元,涨后工资 8000元】。

代码实现如下:

package main

import "fmt"

func main() {
  var n, salary, sum, a int
  var err error

  fmt.Println("请输入您的工龄")
  _, err = fmt.Scanln(&n)
  if err != nil {
    fmt.Println(err)
  }

  fmt.Println("请输入您的基本工资")
  _, err = fmt.Scanln(&salary)
  if err != nil {
    fmt.Println(err)
  }

  if n >= 0 && n < 1 {
    a = 200
  } else if n >= 1 && n < 3 {
    a = 500
  } else if n >= 3 && n < 5 {
    a = 1000
  } else if n >= 5 && n < 10 {
    a = 2500
  } else if n >= 10 && n < 15 {
    a = 5000
  }

  sum = salary + a
  fmt.Printf("您目前工作了%d年,基本工资为%d元,应涨工资%d元,涨后工资%d元", n, salary, a, sum)
}

打印结果如下:

2、定义一个map存储如下数据:

  1. France 首都是 巴黎

  2. Italy 首都是 罗马

  3. Japan 首都是 东京

  4. India 首都是 新德里

需检测American的首都是否存在,后将map的数据存入到mysql数据库,实现如下:

package main

import (
  "database/sql"
  "fmt"

  _ "github.com/go-sql-driver/mysql" //注册MySQL驱动
)

func main() {
  //创建集合
  var countryCapitalMap map[string]string
  countryCapitalMap = make(map[string]string)

  // map插入key - value对,各个国家对应的首都
  countryCapitalMap["France"] = "巴黎"
  countryCapitalMap["Italy"] = "罗马"
  countryCapitalMap["Japan"] = "东京"
  countryCapitalMap["India "] = "新德里"

  //使用键输出地图值
  for country := range countryCapitalMap {
    fmt.Println(country, "首都是", countryCapitalMap[country])
  }

  //查看元素在集合中是否存在
  capital, ok := countryCapitalMap["American"] //如果确定是真实的,则存在,否则不存在

  if ok {
    fmt.Println("American 的首都是", capital)
  } else {
    fmt.Println("American 的首都不存在")
  }
  //用户名:密码@tcp(地址:3306)/数据库名
  db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test")
  if err != nil {
    fmt.Println(err)
  }
  //往数据库插入数据
  for k, v := range countryCapitalMap {
    result, err := db.Exec("INSERT INTO countryCapital(country,capital)VALUES (?,?)", k, v)
    if err != nil {
      fmt.Println(result, err)
    }
  }
}

3、判断两个map是否拥有相同的键和值,实现如下:

//判断两个map是否拥有相同的健和值
package main

import (
  "fmt"
  _ "fmt"
)

func equal(x, y map[string]int) bool {
  if len(x) != len(y) {
    return false
  }

  for k, xValue := range x { //使用!ok来区分元素不存在和元素存在但值为0的情况
    if yValue, ok := y[k]; !ok || yValue != xValue {
      return false
    }

  }

  return true
}

func main() {
  x := map[string]int{
    "A": 0,
    "B": 1,
    "C": 2,
    "D": 3,
  }

  y := map[string]int{
    "B": 1,
    "C": 2,
    "D": 3,
  }
  z := map[string]int{
    "A": 0,
    "B": 1,
    "C": 2,
    "D": 3,
  }

  fmt.Println(equal(x, y))
  fmt.Println(equal(x, z))
}

打印结果如下:

4、顺序遍历map中的元素。

实现代码如下:

package main

import (
  "fmt"
  _ "fmt"
  "sort"
  _ "sort"
)

func sortMap(student map[string]int) {
  var names []string
  for name := range student {
    names = append(names, name)
  }

  sort.Strings(names)
  for _, name := range names {
    fmt.Printf("%s的年龄是%d\n", name, student[name])
  }
}
func main() {
  student := map[string]int{
    "lisa":     17,
    "bob":      20,
    "victoria": 24,
    "sabit":    40,
  }

  sortMap(student)
}

打印结果如下:

5、定义一个map,存1到20的阶乘并顺序输出。

实现代码一如下:

package main

import (
  "fmt"
)

func main() {
  m := make(map[int]int)
  for i := 0; i <= 20; i++ {
    if i == 0 {
      m[i] = 1
    } else {
      m[i] = m[i-1] * i

    }

    fmt.Println(i, "的阶乘是", m[i])
  }
}

实现代码二如下:

package main

import (
  "fmt"
  "sort"
)

func main() {
  m := make(map[int]int)
  for i := 0; i <= 20; i++ {
    if i == 0 {
      m[i] = 1
    } else {
      m[i] = m[i-1] * i

    }
  }

  arr := make([]int, 0)
  for k, _ := range m {
    arr = append(arr, k)

  }

  sort.Ints(arr)
  for i := 0; i <= len(arr)-1; i++ {
    fmt.Println(arr[i], "的阶乘是", m[arr[i]])
  }
}

输出结果如下:

至此,本次分享就结束了,后期会慢慢补充。

以上仅为个人观点,不一定准确,能帮到各位那是最好的。

好啦,到这里本文就结束了,喜欢的话就来个三连击吧。

扫码关注公众号,获取更多优质内容

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luyaran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值