探索Go语言中的随机数生成、矩阵运算与数独验证
1. Go中的随机数生成
在许多编程任务中,随机数的生成是不可或缺的。Go语言通过 math/rand 包提供了伪随机数生成方式。伪随机数由种子(seed)决定,如果种子相同,生成的数列也会相同。为了确保每次程序运行时产生不同的随机数,我们通常使用当前时间作为种子。
示例1:简单的随机数生成
package mainimport ("fmt""math/rand""time"
)func random(min, max int) int {return rand.Intn(max-min) + min
}func main() {rand.Seed(time.Now().Unix())for i := 0; i < 5; i++ {fmt.Println("生成的随机数:", random(0, 100))}
}
上述程序使用了当前时间作为种子来生成0到100之间的5个随机数。输出结果每次都会不同。
示例2:通过命令行控制随机数生成
为了使程序更具灵活性,我们可以通过命令行传入参数来控制随机数的生成范围和数量,甚至可以指定种子来生成固定序列的伪随机数。
package mainimport ("fmt""math/rand""os""strconv""time"
)func random(min, max int) int {return rand.Intn(max-min) + min
}func main() {MIN := 0MAX := 100TOTAL := 10SEED := time.Now().Unix()arguments := os.Argsswitch len(arguments) {case 2:MIN, _ = strconv.Atoi(arguments[1])MAX = MIN + 100case 3:MIN, _ = strconv.Atoi(arguments[1])MAX, _ = strconv.Atoi(arguments[2])case 4:MIN, _ = strconv.Atoi(arguments[1])MAX, _ = strconv.Atoi(arguments[2])TOTAL, _ = strconv.Atoi(arguments[3])case 5:MIN, _ = strconv.Atoi(arguments[1])MAX, _ = strconv.Atoi(arguments[2])TOTAL, _ = strconv.Atoi(arguments[3])SEED, _ = strconv.ParseInt(arguments[4], 10, 64)default:fmt.Println("使用默认值")}rand.Seed(SEED)for i := 0; i < TOTAL; i++ {fmt.Printf("%d ", random(MIN, MAX))}fmt.Println()
}
通过不同的命令行参数,可以控制生成的随机数。例如:
$ go run randomNumbers.go 10 50 5
14 37 27 49 16
这段代码生成了5个在10到50之间的随机数。
2. 加密级别的随机数生成
在安全领域,生成密码时,伪随机数不足以提供安全性。Go提供了 crypto/rand 包来生成加密安全的随机数,它可以生成不可预测的随机序列。
示例3:生成加密安全的随机密码
package mainimport ("crypto/rand""encoding/base64""fmt""os""strconv"
)func generateBytes(n int64) ([]byte, error) {b := make([]byte, n)_, err := rand.Read(b)if err != nil {return nil, err}return b, nil
}func generatePass(s int64) (string, error) {b, err := generateBytes(s)return base64.URLEncoding.EncodeToString(b), err
}func main() {var LENGTH int64 = 8arguments := os.Argsif len(arguments) == 2 {LENGTH, _ = strconv.ParseInt(arguments[1], 10, 64)}myPass, err := generatePass(LENGTH)if err != nil {fmt.Println("生成密码失败:", err)return}fmt.Println("生成的密码:", myPass[0:LENGTH])
}
运行程序后会生成一个随机密码,例如:
生成的密码: Zm9yQ29kZT==
3. 矩阵运算与生成
矩阵在图像处理、机器学习等领域中有广泛应用。我们可以利用Go语言生成随机矩阵,并进行矩阵加法、减法等运算。
示例4:生成随机矩阵并进行矩阵加法
package mainimport ("fmt""math/rand""time"
)func generateMatrix(row, col int) [][]int {matrix := make([][]int, row)for i := range matrix {matrix[i] = make([]int, col)for j := range matrix[i] {matrix[i][j] = rand.Intn(10)}}return matrix
}func addMatrices(m1, m2 [][]int) [][]int {result := make([][]int, len(m1))for i := range m1 {result[i] = make([]int, len(m1[i]))for j := range m1[i] {result[i][j] = m1[i][j] + m2[i][j]}}return result
}func main() {rand.Seed(time.Now().Unix())m1 := generateMatrix(3, 3)m2 := generateMatrix(3, 3)fmt.Println("矩阵1:", m1)fmt.Println("矩阵2:", m2)result := addMatrices(m1, m2)fmt.Println("矩阵加法结果:", result)
}
通过上述代码,您可以生成两个3x3的随机矩阵,并执行矩阵加法运算。
4. 数独验证程序
数独是一个流行的逻辑益智游戏,要求将1到9填入一个9x9的网格中,使每行、每列和每个3x3的子区域都包含不重复的数字。我们可以通过编写程序验证数独是否解得正确。
示例5:数独验证
package mainimport ("bufio""errors""fmt""os""strconv""strings"
)func importFile(file string) ([][]int, error) {var err errorvar mySlice = make([][]int, 0)f, err := os.Open(file)if err != nil {return nil, err}defer f.Close()r := bufio.NewReader(f)for {line, err := r.ReadString('\n')fields := strings.Fields(line)temp := make([]int, 0)for _, v := range fields {n, err := strconv.Atoi(v)if err != nil {return nil, err}temp = append(temp, n)}if len(temp) != 0 {mySlice = append(mySlice, temp)}if err != nil {break}}return mySlice, nil
}func validPuzzle(sl [][]int) bool {for i := 0; i <= 2; i++ {for j := 0; j <= 2; j++ {iEl := i * 3jEl := j * 3mySlice := []int{0, 0, 0, 0, 0, 0, 0, 0, 0}for k := 0; k <= 2; k++ {for m := 0; m <= 2; m++ {bigI := iEl + kbigJ := jEl + mval := sl[bigI][bigJ]if val > 0 && val < 10 {if mySlice[val-1] == 1 {fmt.Println("数字出现两次:", val)return false} else {mySlice[val-1] = 1}} else {fmt.Println("无效值:", val)return false}}}}}for i := 0; i <= 8; i++ {sum := 0for j := 0; j <= 8; j++ {sum = sum + sl[i][j]}if sum != 45 {return false}sum = 0}for i :=0; i <= 8; i++ {sum := 0for j := 0; j <= 8; j++ {sum = sum + sl[j][i]}if sum != 45 {return false}sum = 0}return true
}func main() {arguments := os.Argsif len(arguments) != 2 {fmt.Printf("使用: loadFile 文件名\n")return}file := arguments[1]mySlice, err := importFile(file)if err != nil {fmt.Println(err)return}if validPuzzle(mySlice) {fmt.Println("数独正确!")} else {fmt.Println("数独错误!")}
}
通过此程序,您可以从文件导入一个数独,并验证其是否解得正确。输入数独文件格式为9x9的数独矩阵,每行数字间以空格分隔。
运行程序:
$ go run sudoku.go valid_sudoku.txt
数独正确!
结论
通过本文的学习,读者不仅能掌握如何在Go语言中生成随机数,还能学会如何生成加密安全的随机数、矩阵运算以及数独验证等高级技术。Go语言为我们提供了丰富的工具,能轻松应对多种编程挑战。
相关文章:
探索Go语言中的随机数生成、矩阵运算与数独验证
1. Go中的随机数生成 在许多编程任务中,随机数的生成是不可或缺的。Go语言通过 math/rand 包提供了伪随机数生成方式。伪随机数由种子(seed)决定,如果种子相同,生成的数列也会相同。为了确保每次程序运行时产生不同的随机数,我们…...
无线安全(WiFi)
免责声明:本文仅做分享!!! 目录 WEP简介 WPA简介 安全类型 密钥交换 PMK PTK 4次握手 WPA攻击原理 网卡选购 攻击姿态 1-暴力破解 脚本工具 字典 2-Airgeddon 破解 3-KRACK漏洞 4-Rough AP 攻击 5-wifi钓鱼 6-wifite 其他 WEP简介 WEP是WiredEquivalentPri…...
牛客练习赛128:Cidoai的平均数对(背包dp)
题目描述 给定 nnn 对数 (ai,bi)(a_i,b_i)(ai,bi) 和参数 kkk,你需要选出一些对使得在满足 bib_ibi 的平均值不超过 kkk 的同时,aia_iai 的和最大,求出这个最大值。 输入描述: 第一行两个整数分别表示 n,kn,kn,k。 接下来 nnn 行&…...
Python世界:简易地址簿增删查改算法实践
Python世界:简易地址簿增删查改算法实践 任务背景编码思路代码实现本文小结 任务背景 该任务来自简明Python教程中迈出下一步一章的问题: 编写一款你自己的命令行地址簿程序, 你可以用它浏览、 添加、 编辑、 删除或搜索你的联系人ÿ…...
网络安全-intigriti-0422-XSS-Challenge Write-up
目录 一、环境 二、解题 2.1看源码 一、环境 Intigriti April Challenge 二、解题 要求:弹出域名就算成功 2.1看源码 我们看到marge方法,肯定是原型链污染题目 接的是传参,我们可控的点在于qs.config和qs.settings,这两个可…...
Debian Linux 11 使用crash
文章目录 前言一、环境安装1.1 安装debug package1.2 安装crash 二、使用crash 前言 # cat /etc/os-release PRETTY_NAME"Debian GNU/Linux 11 (bullseye)" NAME"Debian GNU/Linux" VERSION_ID"11" VERSION"11 (bullseye)" VERSION_C…...
python列表 — 按顺序找出b表中比a表多出的元素
目录 一、功能描述 二、适用场景 三、代码实现 一、功能描述 有a、b两个列表,a列表有3个元素;b列表有7个元素。b列表多出的一个元素可能在随机的位置,在不影响其他元素的情况下,找到b列表多出的那四个元素,并按照在…...
如何使用Python创建目录或文件路径列表
在 Python 中,创建目录或生成文件路径列表通常涉及使用 os、os.path 或 pathlib 模块。下面是一些常见的任务和方法,用于在 Python 中创建目录或获取文件路径列表。 问题背景 在初始阶段的 Python 学习过程中,可能遇到这样的问题:…...
领夹麦克风哪个品牌好,哪种领夹麦性价比高,无线麦克风推荐
在音频录制需求日益多样化的今天,无线领夹麦克风作为提升音质的关键设备,其重要性不言而喻。市场上鱼龙混杂,假冒伪劣、以次充好的现象屡见不鲜。这些产品往往以低价吸引消费者,却在音质、稳定性、耐用性等方面大打折扣࿰…...
苍穹外卖学习笔记(五)
文章目录 二.新增菜品1.图片上传2.具体新增菜品 二.新增菜品 1.图片上传 这里采用了阿里云oss对象存储服务 application.yml alioss:endpoint: ${sky.alioss.endpoint}access-key-id: ${sky.alioss.access-key-id}access-key-secret: ${sky.alioss.access-key-secret}bucket…...
什么是卷积层、池化层、BN层,有什么作用?
什么是卷积层、池化层、BN层,有什么作用? 卷积层池化层BN层 卷积层 定义: 卷积层是CNN中的核心组件,它通过卷积运算对输入数据进行特征提取。卷积层由多个卷积单元组成,每个卷积单元的参数通过反向传播算法优化得到。…...
[学习笔记]《CSAPP》深入理解计算机系统 - Chapter 4 处理器体系结构Chapter 5 优化程序性能
总结一些第四章和第五章的一些关键信息 Chapter 4 处理器体系结构将处理组织成阶段 Chapter 5 优化程序性能 Chapter 4 处理器体系结构 在硬件中,寄存器直接将它的输入和输出线连接到电路的其他盆。 在机器级变成中,寄存器代表的是 CPU 中为数不多的可寻…...
案例分享|我是这样转型做数据产品经理的?
本文为才聚学员投稿的原创作品,现在才聚正面向专业项目管理者征集“项目管理实战案例”原创文章,被采纳即可获得丰厚稿酬,欢迎大家关注公众号踊跃投稿。 如您有意向投稿,可将稿件投递给我们。 故事介绍 三段故事,讲…...
ffmpeg面向对象-rtsp拉流相关对象
目录 1.AVFormatContext和FFFormatContext类。1.1 概述1.2 构造函数1.3 oopc的继承实现 2. AVInputFormat 类。2.1 多态的实现 3.所用设计模式3.1模板模式3.2 工厂模式? 3.3 rtsp拉流建链 4.this指针5.小结6.rtsp拉流流程 1.AVFormatContext和FFFormatContext类。 …...
feign client发送Post请求,发送对象参数,服务端接收不到正确参数报错排查
记一次feignclient发送请求服务端接收不到正确参数排查 服务端代码: Operation(summary "Create team")PostMapping("post")RequiresPermissions("team:add")public RestResponse addTeam(Valid Team team) {this.teamService.crea…...
Hadoop林子雨安装
文章目录 hadoop安装教程注意事项: hadoop安装教程 链接: 安装教程 注意事项: 可以先安装ububtu增强功能,完成共享粘贴板和共享文件夹 ubuntu增强功能 2.这里就可以使用共享文件夹 或者在虚拟机浏览器,用 微信文件传输助手 传文…...
Springboot项目总结
1.为了调用写在其他包里面的类的方法 但是不使用new来实现调用这个类里面的方法,这个时候我们就需要将这个类注入到ioc容器里面,通过ioc容器来实现自动生成一个对象。 对ioc容器的理解:自动将一个对象实现new. 考察了and 和 or组合使用&…...
目标检测从入门到精通——数据增强方法总结
以下是YOLO系列算法(从YOLOv1到YOLOv7)中使用的数据增强方法的总结,包括每种方法的数学原理、相关论文以及对应的YOLO版本。 YOLO系列数据增强方法总结 数据增强方法数学原理相关论文图像缩放将输入图像缩放到固定大小(如448x44…...
SQL server 的异常处理 一个SQL异常 如何不影响其他SQL执行
在 SQL Server 中,存储过程中的 SQL 语句是顺序执行的。如果其中任何一个 SQL 语句遇到了错误或异常,那么默认情况下,这个错误会导致整个事务(如果有的话)回滚,并且存储过程会立即停止执行,不会…...
STM32——看门狗通俗解析
笔者在学习看门狗的视频后,对看门狗仍然是一知半解,后面在实际应用中发现它是一个很好用的检测或者调试工具。所以总结一下笔者作为初学小白对看门狗的理解。 主函数初始化阶段、循环阶段和复位 众所周知,程序的运行一般是这样的࿱…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
