• 【Go语言刷题篇】Go从0到入门5:Map综合复习、条件语句、循环语句练习


    前言

    • 本期是学习Golang:Map综合复习、条件语句、循环语句练习,有不懂的地方可以评论进行讨论!
    • 本系列文章采用牛客的核心代码模式进行案例代码提供,帮助大家从0到入门的学习过程中进行配套的刷题~
    • 推荐给大家一款刷题、面试的神器,我也是用这一款神器进行学习的!~链接如下:刷题神器跳转链接
    • 该神器不仅网页界面十分美观,而且操作起来极易上手入门!非常适合新手进行系统性的学习!
    • 小白新手可以通过该神器进行日常的刷题、看大厂面经、学习计算机基础知识、与大牛面对面沟通~ 刷题的图片已经放在下面了~
      在这里插入图片描述

    Q1:Map-字符串构成

    问题描述:给定两个字符串des 和src ,判断 des能不能由 src 里面的字符构成,//如果可以,返回 true ;否则返回 false,src中的每个字符只能在 des 中使用一次。

    相关知识:
    1、for range遍历字符串。
    2、cnt[ch-‘a’]隐式转换byte转为int类型。
    3、数组的索引可以充当一个map的key,来表示唯一。

    示例输入:“ab”,“aab”
    示例输出:true

    案例代码:
    思路:放一个 map 用来保存有哪些元素可以用 用一次-1即可。如果没有直接返回失败。

    //import "fmt"
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param des string字符串 
     * @param src string字符串 
     * @return bool布尔型
    */
    func canConstruct(des string, src string) bool {
    	// write code here
    	have := make(map[byte]int)
    	s := []byte(src)
    	for _, i := range s {
    		have[i]++
    	}
    
    	p := []byte(des)
    	for _, i := range p {
    		if have[i] == 0 {
    			return false
    		}
    		have[i]--
    	}
    	return true
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    Q2:Map-不重复的数

    问题描述:给定一个数组,找出数组中所有不重复的数字,并按照从小到大的顺序进行输出。

    相关知识:
    1、map用make方式进行初始化
    2、切片可以用[]int{}的方式进行初始化
    3、for range遍历切片
    4、_,ok :=map[key]的方式判断m中的key是否存在
    5、切片用append方式进行追加

    示例输入:[1,1,2,2,3,3,4,4,5,5]
    示例输出:[]

    示例输入:[3,3,2,2,5,5,1,2,2]
    示例输出:[1]

    案例代码:

    import "sort"
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 最后要有一个 排序的过程 使用sort提供的排序即可
     * @param s int整型一维数组 
     * @return int整型一维数组
    */
    func getNoRepeat(s []int) []int {
    	// write code here
    	var ans []int
    	have := make(map[int]int)
    	for _, i := range s {
    		if _, ok := have[i]; ok == false {
    			have[i] = 1
    		}else{
    			have[i]++
    		}
    	}
    	for i, j := range have{
    		if j == 1{
    			ans = append(ans, i)
    		}
    	}
        sort.Ints(ans) 
    	return ans
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    Q3:条件语句-年龄判定

    问题描述:已知年龄的分段如下, 婴儿(出生0-1岁)、幼儿(1-4岁)包含1岁、儿童(5-11)包含5岁、少年(12-18)包含12岁、青年(19-35)包含19岁、中年(36-59)包含36岁、老年(60以上)包含60岁 ,输入一个人的年龄,返回相应的年龄段。

    相关知识:
    1、if 后面可以接任意数量的 else if 语句。condition 的求值由上到下依次进行,直到某个 if 或者 else if 中的 condition 为 true 时,执行相应的代码块。如果没有一个 conditon 为 true,则执行 else 中的代码块。

    示例输入:35
    示例输出:“青年”

    案例代码:

    //import "fmt"
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * @param age int整型 年龄
     * @return string字符串
    */
    func getAge( age int ) string {
    	// write code here
    	var ans string
    	switch {
    	case age <1 && age >= 0:
    		ans = "婴儿"
    	case age >=1 && age <= 4:
    		ans = "幼儿"
    	case age >= 5 && age <= 11:
    		ans = "儿童"
    	case age >= 12 && age <= 18:
    		ans = "少年"
    	case age >= 19 && age <= 35:
    		ans = "青年"
    	case age >=36 && age <=59:
    		ans = "中年"
    	case age >= 60:
    		ans = "老年"
    	}
    	return  ans
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    Q4:条件语句-成绩判定

    问题描述:根据成绩分数输出成绩等级,判定规则如下 分数低于60 算不及格,60-80 含60 为中等, 80-90含80 为良好,90分以上含90 为优秀。

    相关知识:
    1、switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止。 Golang switch 分支表达式可以是任意类型,不限于常量。可省略 break,默认自动终止。
    switch var1 {
    case val1:

    case val2:

    default:

    }

    示例输入:59
    示例输出:“不及格”

    案例代码:

    func judgeScore(score int) string {
        // write code here
        var grade string
        switch {
        case score < 60:
            grade = "不及格"
        case score >= 60 && score < 80:
            grade = "中等"
        case score >= 80 && score < 90:
            grade = "良好"
        case score >= 90:
            grade = "优秀"
        }
        return grade
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    Q5:循环语句-乘法口诀表

    问题描述:打印9*9乘法口诀表。

    相关知识:
    1、golang中 for 循环中嵌套一个或多个 for 循环,代码格式如下:
    for [condition | ( init; condition; increment ) | Range]
    {
    for [condition | ( init; condition; increment ) | Range]
    {
    statement(s)
    }
    statement(s)
    }
    init: 一般为赋值表达式,给控制变量赋初值;
    condition: 关系表达式或逻辑表达式,循环控制条件;
    increment: 一般为赋值表达式,给控制变量增量或减量。
    statement:循环语句
    2、goalng中,fmt.printf 格式化打印 %d表示数字,-3d 表示左对齐,占 3 位 \n表示下一行。

    示例输入:
    示例输出:

    1*1=1
    1*2=2  2*2=4
    1*3=3  2*3=6  3*3=9
    1*4=4  2*4=8  3*4=12 4*4=16
    1*5=5  2*5=10 3*5=15 4*5=20 5*5=25
    1*6=6  2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
    1*7=7  2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
    1*8=8  2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
    1*9=9  2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    案例代码:

    import "fmt"
    func main() {
    	fmt.Println("1*1=1")
    	for i := 2; i <= 9; i++ {
    		for j := 1; j <= i-1; j++ {
    			str := fmt.Sprintf("%d*%d=%-3d", j, i,j*i)
                
    			fmt.Printf("%s", str)
    		}
    		str := fmt.Sprintf("%d*%d=%d", i, i, i*i)
    		fmt.Printf("%s\n", str)
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    Q6:循环语句-坐标转换

    问题描述:已知一个mn二维数组,二维数组中的元素的索引(x,y)可以表示为一个二维坐标,现将这个二维坐标转换为一维坐标,一维坐标=xn+y。返回这个一维数组。

    相关知识:
    1、数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1
    for i := 0; i < len(a); i++ {
    }
    for index, v := range a {
    }
    2、长度是数组类型的一部分,因此,var a[5] int和var a[10]int是不同的类型。
    3、数组定义:var a [len]int,比如:var a [5]int,数组长度必须是常量,且是类型的组成部分。一旦定义,长度不能变。

    示例输入:[[1,2,3],[4,5,6],[7,8,9]]
    示例输出:[1,2,3,4,5,6,7,8,9]

    案例代码:

    //import "fmt"
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * @param array int整型二维数组 
     * @return int整型一维数组
    */
    func transform(array [][]int) []int {
    	// write code here
    	m := len(array)
    	n := len(array[0])
    	var arr []int = make([]int, m*n)
    	i := 0
    	for a := 0; a < m; a++ {
    		for b := 0; b < n; b++ {
    			arr[i] = array[a][b]
    			i++
    		}
    	}
    	return arr
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    后文:刷题神器

    点击链接进行跳转注册,开始你的保姆级刷题之路吧!刷题打怪码神之路

    另外这里不仅仅可以刷题,你想要的这里都会有,十分适合小白和初学者入门学习~
    1、算法篇(398题):面试必刷100题、算法入门、面试高频榜单
    2、数据结构篇(300题):都是非常经典的链表、树、堆、栈、队列、动态规划等
    3、语言篇(500题):C/C++、java、python入门算法练习
    4、SQL篇(82题):快速入门、SQL必知必会、SQL进阶挑战、面试真题
    5、大厂笔试真题:字节跳动、美团、百度、腾讯…掌握经验不在惧怕面试!

    在这里插入图片描述

  • 相关阅读:
    Redis系列之什么是布隆过滤器?
    Springboot企业项目管理系统的设计与实现c7ca1计算机毕业设计-课程设计-期末作业-毕设程序代做
    Opencv实现目标检测
    射频信号处理知识点点滴滴
    Java异常该如何正确使用,避坑指南
    【面试经典150 | 区间】用最少数量的箭引爆气球
    高并发缓存策略大揭秘:面试必备的缓存更新模式解析
    springcloud使用openFeign
    Mysql专题
    分库分表及高可用搭建
  • 原文地址:https://blog.csdn.net/weixin_51484460/article/details/125500949