Golang学习记录:基础篇练习(一)

news2024/11/29 16:24:10

Golang学习记录:基础篇练习(一)

  • 1、九九乘法表
  • 2、水仙花数
  • 3、斐波那契数列
  • 4、编写一个函数,求100以内的质数
  • 5、统计字符串里面的字母、数字、空格以及其他字符的个数
  • 6、二维数组对角线的和
  • 7、冒泡排序算法
  • 8、选择排序算法
  • 9、二分查找法

今天分享的是尝试用golang来写一些我们之前用其他语言实现过的例子。如果你也在学习golang的话,可以先自己做一遍,然后再来看我的答案。

在这里插入图片描述

(答案是经过测试的,不存在错误,可放心食用)

1、九九乘法表

package main

import "fmt"

func main() {
	fmt.Println("九九乘法表:")
	for i := 1; i <= 9; i++ {
		for j := 1; j <= i; j++ {
			fmt.Printf("%d*%d=%-2d ", j, i, i*j)
		}
		fmt.Println()
	}
}

2、水仙花数

package main

import (
	"fmt"
	"math"
)

func main() {
	fmt.Println("水仙花数:")
	for i := 100; i < 1000; i++ {
		hundred := float64(i / 100)
		ten := float64(i / 10 % 10)
		one := float64(i % 10)
		//math.Pow函数的定义需要两个float64类型的参数。这是由Go语言的标准库决定的。
		//当你尝试将float32类型的值传递给它时,编译器会抛出一个错误,因为float32和
		//float64是不同的数据类型,它们在内存中的表示和精度都不同。
		if math.Pow(hundred, 3)+math.Pow(ten, 3)+math.Pow(one, 3) == float64(i) {
			fmt.Println(i)
		}
	}
}

3、斐波那契数列

package main

import "fmt"

func main() {
	var n, t1, t2 = 10, 0, 1
	fmt.Print("斐波那契数列: ")

	for i := 1; i <= n; i++ {
		fmt.Print(t1, " ")
		nextTerm := t1 + t2
		t1 = t2
		t2 = nextTerm
	}
	fmt.Println()
}

4、编写一个函数,求100以内的质数

package main

import (
	"fmt"
)

func isPrime(n int) bool {
	if n <= 1 {
		return false
	}
	for i := 2; i*i <= n; i++ {
		if n%i == 0 {
			return false
		}
	}
	return true
}

func main() {
	fmt.Println("100以内的质数:")
	for i := 2; i <= 100; i++ {
		if isPrime(i) {
			fmt.Print(i, " ")
		}
	}
	fmt.Println()
}

5、统计字符串里面的字母、数字、空格以及其他字符的个数

package main

import (
	"fmt"
)

func main() {
	str := "Hello, 世界! 123 Go."
	var letters, digits, spaces, others int
	for _, char := range str {
		if (char >= 'a' && char <= 'z') || (char >= 'A' && char <= 'Z') {
			letters++
		} else if char >= '0' && char <= '9' {
			digits++
		} else if char == ' ' {
			spaces++
		} else {
			others++
		}
	}
	fmt.Printf("字母: %d\n数字: %d\n空格: %d\n其他: %d\n", letters, digits, spaces, others)
}

// switch 判断

// func countChars(s string) (letters, digits, spaces, others int) {
// 	for _, char := range s {
// 		switch {
// 		case unicode.IsLetter(char):
// 			letters++
// 		case unicode.IsDigit(char):
// 			digits++
// 		case unicode.IsSpace(char):
// 			spaces++
// 		default:
// 			others++
// 		}
// 	}
// 	return
// }

// func main() {
// 	s := "Hello, 世界! 123 Go."
// 	letters, digits, spaces, others := countChars(s)
// 	fmt.Printf("字母: %d\n数字: %d\n空格: %d\n其他: %d\n", letters, digits, spaces, others)
// }

6、二维数组对角线的和

package main

import (
	"fmt"
)

func main() {
	matrix := [][]int{
		{1, 2, 3},
		{4, 5, 6},
		{7, 8, 9},
	}
	var sum int
	n := len(matrix)
	for i := 0; i < n; i++ {
		sum += matrix[i][i] + matrix[i][n-i-1]
	}

	fmt.Printf("二维数组对角线的和: %d\n", sum)
}

7、冒泡排序算法

package main

import (
	"fmt"
)

func bubbleSort(nums []int) []int {
	n := len(nums)
	for i := 0; i < n-1; i++ {
		for j := 0; j < n-i-1; j++ {
			if nums[j] > nums[j+1] {
				nums[j], nums[j+1] = nums[j+1], nums[j]
			}
		}
	}
	return nums
}

func main() {
	nums := []int{64, 34, 25, 12, 22, 11, 90}
	fmt.Println("冒泡排序结果:", bubbleSort(nums))
}

8、选择排序算法

package main

import (
	"fmt"
)

func selectionSort(nums []int) []int {
	n := len(nums)
	for i := 0; i < n; i++ {
		minIdx := i
		for j := i + 1; j < n; j++ {
			if nums[j] < nums[minIdx] {
				minIdx = j
			}
		}
		nums[i], nums[minIdx] = nums[minIdx], nums[i]
	}
	return nums
}

func main() {
	nums := []int{64, 34, 25, 12, 22, 11, 90}
	fmt.Println("选择排序结果:", selectionSort(nums))
}

9、二分查找法

package main

import (
	"fmt"
)

func binarySearch(nums []int, target int) int {
	left, right := 0, len(nums)-1
	
	for left <= right {
		mid := left + (right-left)/2
		if nums[mid] == target {
			return mid
		} else if nums[mid] < target {
			left = mid + 1
		} else {
			right = mid - 1
		}
	}
	return -1
}

func main() {
	nums := []int{2, 3, 4, 7, 10, 21, 23, 40, 67}
	target := 10
	result := binarySearch(nums, target)
	if result != -1 {
		fmt.Println("元素在数组中的位置为:", result+1)
	} else {
		fmt.Println("元素不在数组中")
	}
}

文末再分享几个我在github上面找到的优质开源项目,方便日后学习:

七天用 Go 从零实现系列:7days-golang

Training for Golang (go language)

Go 数据可视化项目:go-echarts

都到这个份上了,不点赞很难说得过去吧(doge)

o( ̄┰ ̄*)ゞ

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1096051.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JDK 19 协程新特性学习

目录 一、协程定义 二、协程发展史 &#xff08;一&#xff09;协程的基本发展史说明 &#xff08;二&#xff09;Java协程发展说明 三、JDK 19 协程的原理细节 &#xff08;一&#xff09;Thread.ofVirtual().start() &#xff08;二&#xff09;SocketChannel.write(…

没有前端如何测试后端跨域问题

一、问题 前段时间对项目中的跨域做了相关的处理&#xff0c;网上有很多跨域的解决方案。前端解决&#xff0c;后端解决&#xff0c;nginx代理解决。我采用的是在后端中使用Cors来解决跨域的问题。但是前端项目还没有搭建起来&#xff0c;并不知道Cors的解决方案是否会生效&am…

揭秘元宇宙背后最炫科技风:数字经济时代,元宇宙发展解决方案及核心技术

文章目录 前言一、关于“元宇宙”业界趋势1.1、元宇宙的概念与发展历程1.2、行业应用体验向虚实融合和实时互动演进1.3、数字内容成为各行业 3D 数字世界入口 二、对于元宇宙发展的解决方案和实践2.1、MetaStudio 构建场景化全栈能力2.2、企业 3D 空间&#xff0c;围绕 4 类场景…

PyQt界面里如何加载本地视频以及调用摄像头实时检测(小白入门必看)

目录 1.PyQt介绍 2.代码实现 2.1实时调用摄像头 2.2 使用YOLOv5推理 2.3 代码中用到的主要函数 1.PyQt介绍 PyQt是一个用于创建桌面应用程序的Python绑定库&#xff0c;它基于Qt框架。Qt是一个跨平台的C应用程序开发框架&#xff0c;提供了丰富的图形界面、网络通信、数据…

Qt项目通过.pri文件将众多文件按功能模块分类显示,开发大型项目必备

Qt项目通过.pri文件将众多文件按功能模块分类显示&#xff0c;开发大型项目必备 Chapter1 Qt项目通过.pri文件将众多文件按功能模块分类显示&#xff0c;开发大型项目必备($$$)Chapter2 在Qt项目中添加pri文件前言创建pri文件的步骤一、创建Qt项目二、创建pri空文件三、调试 Ch…

SpringCloud学习笔记-Nacos服务分级存储模型

Nacos服务分级存储模型 一级是服务&#xff0c;例如userservice二级是集群&#xff0c;例如杭州或上海三级是实例&#xff0c;例如杭州机房的某台部署了userservice的服务器 微服务互相访问时&#xff0c;应该尽可能访问同集群实例&#xff0c;因为本地访问速度更快。当本集…

创新YOLOv8改进:结合全新可变形大核注意力(D-LKA Attention)实现多尺度目标涨点

🔥🔥🔥 提升多尺度目标检测,创新提升 🔥🔥🔥 🔥🔥🔥 捕捉图像特征和处理复杂图像特征 🔥🔥🔥 👉👉👉: 本专栏包含大量的新设计的创新想法,包含详细的代码和说明,具备有效的创新组合,可以有效应用到改进创新当中 👉👉👉: 🐤🐤�…

寻找AI时代的关键拼图,从美国橡树岭国家实验室读懂AI存力信标

超算&#xff0c;是计算产业的明珠&#xff0c;是人类探索未知的航船。超算的发展与变化&#xff0c;不仅代表着各个国家与地区间的科技竞争力&#xff0c;更将作为趋势风向标&#xff0c;影响整个数字化体系的走向。 在目前阶段&#xff0c;超算与AI计算的融合是大势所趋。为了…

C# GPEN-BFR 图像修复

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms;namespace 图像修复 {pu…

【部署】Linux Shell脚本部署java程序 (jar包)

文章目录 前言 前言 #!/usr/bin/env bash #可变参数变量#部署磁盘路径 baseDirPath/data/apps/java/smj-exchange-upload #jar包名称 packageNamesmj-exchange-upload.jar #命令启动包名 xx.jar的xxpid #进程pid#检测pid getPid(){echo "检测状态-----------------------…

Python爬虫:某书平台的Authorization参数js逆向

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据开发、数据分析等。 🐴欢迎小伙伴们点赞👍🏻、收藏⭐️、…

深势科技基于 Serverless 容器为科研人员打造高效的开发平台

作者&#xff1a;李样兵、刘杉、木环、玖宇、鼎岳 云端的科学研究&#xff0c;AI for Science 新范式 以往科学家们的科研工作需要经过大量实验的重复验证、复杂数学计算&#xff0c;以及长年累月的不断试错和苦苦探索。云计算基础服务的发展和人工智能技术 AI 的兴起&#x…

自动驾驶学习笔记(五)——绕行距离调试

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《2023星火培训【感知专项营】》免费课程—>传送门 文章目录 前言 调试内容 打开在线编辑器 打开pl…

【Docker 内核详解】namespace 资源隔离(五):User namespaces

【Docker 内核详解 - namespace 资源隔离】系列包含&#xff1a; namespace 资源隔离&#xff08;一&#xff09;&#xff1a;进行 namespace API 操作的 4 种方式namespace 资源隔离&#xff08;二&#xff09;&#xff1a;UTS namespace & IPC namespacenamespace 资源隔…

narak靶机

信息搜集 主机发现 端口扫描 靶机开放了22/ssh , 80/http端口服务 UDP协议扫描端口 没有啥发现 综合扫描 web渗透 web页面 登陆80web页面&#xff0c;进行信息收集&#xff0c;在源代码和页面中似乎都没发现什么信息 web目录扫描 其中webdav很有意思&#xff0c;我们看看…

AutoSar CP学习概要

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 设计模式系列 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everythi…

每个后端都应该了解的OpenResty入门以及网关安全实战

简介 在官网上对 OpenResty 是这样介绍的&#xff08;http://openresty.org&#xff09;&#xff1a; “OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台&#xff0c;其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩…

CV计算机视觉每日开源代码Paper with code速览-2023.10.13

精华置顶 墙裂推荐&#xff01;小白如何1个月系统学习CV核心知识&#xff1a;链接 点击CV计算机视觉&#xff0c;关注更多CV干货 论文已打包&#xff0c;点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【基础网络架构】CHIP: Contrastive Hierarchical Image …

计算机系统概述(机组第一章)

补充&#xff1a; 1.1.1 计算机软硬件概念&&计算机系统的层次结构 思维导图 除了思维导图中的三个层级以外还包括两个层级 在实际机器下还可以延伸一级微程序机器&#xff0c;即将实际机器执行的指令翻译成一组微指令构成一个微程序。为程序机器执行完一个微程序在进…

Android MediaCodec 框架 基于codec2

系列文章的目的是什么&#xff1f; 粗略&#xff1a; 解码需要哪些基础的服务&#xff1f;标准解码的调用流程&#xff1f;各个流程的作用是什么&#xff1f;解码框架的层次&#xff1f;各个层次的作用&#xff1f; 细化&#xff1a; 解码参数的配置&#xff1f;解码输入数…