13. 猜最大公约数最小公倍数小游戏
文章目录
-
- 概要
- 整体架构流程
- 技术名词解释
- 技术细节
- 小结
1. 概要
~ Jack Qiao对米粒说:“今天咱们玩个小游戏,这个游戏的玩家需要猜出,两个随机生成的整数的最大公约数(GCD)和最小公倍数(LCM)。如果猜对了,就给予奖励,猜错了则给出提示。
~ 米粒思考后,想到有以下模块:
> 随机数生成、函数、最大公约数(GCD)、最小公倍数(LCM)、输入输出、控制结构等知识。
2. 整体架构流程
2.1. 计算最大公约数(GCD)
- 概念: 最大公约数是能够同时整除两个或多个整数的最大正整数。
int gcd(int a, int b) {while (b != 0) {int temp = b;b = a % b;a = temp;}return a; }
> 这里的while (b != 0),这个 while 循环会一直执行,直到 b 变为 0。
> 循环的目的是通过不断地更新 a 和 b,最终使得 b 变为 0。
> int temp = b; 创建一个临时变量 temp,并将其赋值为 b 的当前值。
b = a % b; 将 b 更新为 a 除以 b 的余数。
a = temp; 将 a 更新为之前的 b 值(即 temp)。
~ 循环的目的是通过不断地更新 a 和 b,最终使得 b 变为 0。
2.2. 计算最小公倍数(LCM)
- 概念: 最小公倍数是能够同时被两个或多个整数整除的最小正整数。
int lcm(int a, int b) {return (a * b) / gcd(a, b); }
> 先计算两个数的最大公约数 gcd(a, b),然后用两个数的乘积除以最大公约数得到最小公倍数。
2.3. main函数
int main() {int num1, num2;int gcd_result, lcm_result;int user_gcd_guess, user_lcm_guess;char play_again;// 初始化随机数生成器srand(time(NULL));// 游戏主循环do {// 生成两个随机数num1 = rand() % 50 + 1; // 生成1到50之间的随机数num2 = rand() % 50 + 1;// 显示随机生成的两个数printf("随机生成的两个数是: %d 和 %d\n", num1, num2);// 计算最大公约数和最小公倍数gcd_result = gcd(num1, num2);lcm_result = lcm(num1, num2);// 让用户猜测最大公约数printf("请猜这两个数的最大公约数: ");scanf("%d", &user_gcd_guess);// 检查用户的猜测是否正确if (user_gcd_guess == gcd_result) {printf("恭喜你,猜对了!最大公约数确实是 %d。\n", gcd_result);}else {printf("很遗憾,猜错了。最大公约数是 %d。\n", gcd_result);}// 让用户猜测最小公倍数printf("请猜这两个数的最小公倍数: ");scanf("%d", &user_lcm_guess);// 检查用户的猜测是否正确if (user_lcm_guess == lcm_result) {printf("恭喜你,猜对了!最小公倍数确实是 %d。\n", lcm_result);}else {printf("很遗憾,猜错了。最小公倍数是 %d。\n", lcm_result);}// 询问用户是否想再次玩游戏printf("你想再玩一次吗?(y/n): ");scanf(" %c", &play_again);} while (play_again == 'y' || play_again == 'Y');printf("谢谢你的参与!再见!\n");return 0; }
2.3.1. 随机数生成
- 函数: srand() 和 rand()
- srand(time(NULL)): 初始化随机数生成器,使用当前时间作为种子,确保每次运行程序时生成的随机数序列不同。
- rand() % 50 + 1: 生成1到50之间的随机数。
2.3.2. 控制结构
> 循环:使用 do-while 循环实现游戏的主循环,确保至少执行一次。
do {// 游戏逻辑 } while (play_again == 'y' || play_again == 'Y');
2.4. 运行结果
2.5. 全部代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>// 定义一个函数来计算最大公约数(GCD)
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}// 定义一个函数来计算最小公倍数(LCM)
int lcm(int a, int b) {
return (a * b) / gcd(a, b);
}int main() {
int num1, num2;
int gcd_result, lcm_result;
int user_gcd_guess, user_lcm_guess;
char play_again;// 初始化随机数生成器
srand(time(NULL));// 游戏主循环
do {
// 生成两个随机数
num1 = rand() % 50 + 1; // 生成1到50之间的随机数
num2 = rand() % 50 + 1;// 显示随机生成的两个数
printf("随机生成的两个数是: %d 和 %d\n", num1, num2);// 计算最大公约数和最小公倍数
gcd_result = gcd(num1, num2);
lcm_result = lcm(num1, num2);// 让用户猜测最大公约数
printf("请猜这两个数的最大公约数: ");
scanf("%d", &user_gcd_guess);// 检查用户的猜测是否正确
if (user_gcd_guess == gcd_result) {
printf("恭喜你,猜对了!最大公约数确实是 %d。\n", gcd_result);
}
else {
printf("很遗憾,猜错了。最大公约数是 %d。\n", gcd_result);
}// 让用户猜测最小公倍数
printf("请猜这两个数的最小公倍数: ");
scanf("%d", &user_lcm_guess);// 检查用户的猜测是否正确
if (user_lcm_guess == lcm_result) {
printf("恭喜你,猜对了!最小公倍数确实是 %d。\n", lcm_result);
}
else {
printf("很遗憾,猜错了。最小公倍数是 %d。\n", lcm_result);
}// 询问用户是否想再次玩游戏
printf("你想再玩一次吗?(y/n): ");
scanf(" %c", &play_again);} while (play_again == 'y' || play_again == 'Y');
printf("谢谢你的参与!再见!\n");
return 0;
}
3. 技术名词解释
> 计算最大公约数(GCD),最大公约数是能够同时整除两个或多个整数的最大正整数。
> 计算最小公倍数(LCM),最小公倍数是能够同时被两个或多个整数整除的最小正整数。
4. 技术细节
~ 在每次循环中:
> 让用户猜测最小公倍数,并检查用户的猜测是否正确。
> 让用户猜测最大公约数,并检查用户的猜测是否正确。
> 计算这两个数的最大公约数和最小公倍数。
> 显示这两个随机数。
> 生成两个1到50之间的随机数 num1 和 num2。
5. 小结
~ 米粒最后对该游戏做了如下总结
该游戏通过生成两个1到50之间的随机数,利用欧几里得算法计算最大公约数(GCD)和公式 `(a * b) / gcd(a, b)计算最小公倍数(LCM),并通过 `printf` 和 `scanf` 函数实现用户交互,使用 `do-while` 循环和 `if-else` 语句控制游戏流程,确保用户可以多次猜测并获得即时反馈。
相关文章:
13. 猜最大公约数最小公倍数小游戏
文章目录 概要整体架构流程技术名词解释技术细节小结 1. 概要 ~ Jack Qiao对米粒说:“今天咱们玩个小游戏,这个游戏的玩家需要猜出,两个随机生成的整数的最大公约数(GCD)和最小公倍数(LCM)。如…...
Git 多仓库提交用户信息动态设置
Git 多仓库提交用户信息动态设置 原文地址:dddhl.cn 前言 在日常开发中,我们可能需要同时管理多个远程仓库(如 GitHub、Gitee、GitLab),而每个仓库使用不同的邮箱和用户名。比如,GitHub 和 Gitee 使用相…...
2024.6使用 UMLS 集成的基于 CNN 的文本索引增强医学图像检索
Enhancing Medical Image Retrieval with UMLS-Integrated CNN-Based Text Indexing 问题 医疗图像检索中,图像与相关文本的一致性问题,如患者有病症但影像可能无明显异常,影响图像检索系统准确性。传统的基于文本的医学图像检索࿰…...
了解Redis(第一篇)
目录 Redis基础 什么事Redis Redis为什么这么快 除了 Redis,你还知道其他分布式缓存方案吗? 说-下 Redis 和 Memcached 的区别和共同点 为什么要用Redis? 什么是 Redis Module?有什么用? Redis基础 什么事Redis Redis (REmote DIctionary S…...
UE5 第一人称射击项目学习(二)
在上一章节中。 得到了一个根据视角的位置创建actor的项目。 现在要更近一步,对发射的子弹进行旋转。 不过,现在的子弹是圆球形态的,所以无法分清到底怎么旋转,所以需要把子弹变成不规则图形。 现在点开蓝图。 这里修改一下&…...
npm/cnpm的使用
npm 1、安装npm 前往nodejs官网下载安装node 验证是否安装成功node node -v node安装npm也会安装 npm -v 2、使用npm 1. 初始化项目 在一个项目文件夹中运行: npm init 根据提示输入项目信息(如项目名称、版本号等)。 如果你希望快速初…...
go-zero(六) JWT鉴权
go-zero JWT鉴权 还记得我们之前登录功能,返回的信息是token吗? 这个token其实就是JSON Web Token简称JWT,它是一种开放标准(RFC 7519),用于在网络应用环境间安全地传递声明信息。 它是一种基于 JSON 的令牌…...
做一个FabricJS.cc的中文文档网站——面向markdown编程
📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,用爱发电&#…...
开发 + 安全:网络安全的协作方法
开发团队和安全团队之间由来已久的紧张关系一直是组织内部摩擦的根源。开发人员优先考虑速度和效率,旨在通过快节奏、迭代的开发周期快速交付功能和产品并高效前进。另一方面,安全团队努力平衡风险和创新,但必须专注于使用护栏保护敏感数据和…...
Next.js- App Router 概览
#题引:我认为跟着官方文档学习不会走歪路 一:App Router与Page Router 在 v13 版本中,Next.js 引入了一个基于 React 服务器组件 构建的新的 App Router,而在这之前,Next.js 使用的是Page Router。 目录结构 pages …...
python oa服务器巡检报告脚本的重构和修改(适应数盾OTP)有空再去改
Two-Step Vertification required: Please enter the mobile app OTPverification code: 01.因为巡检的服务器要双因子认证登录,也就是登录堡垒机时还要输入验证码。这对我的巡检查服务器的工作带来了不便。它的机制是每一次登录,算一次会话…...
【工控】线扫相机小结 第四篇
背景 这一片主要是对第三篇继续补充。话说上一篇讲到了两种模式的切换,上一篇还遗留了一个Bug,在这一篇里进行订正! 代码回顾 /// <summary>/// 其实就是打开触发/// </summary>void SetLineSacanWorkMode(){-----首先设置为帧…...
亲测解决Unpack operator in subscript requires Python 3.11 or newer
这个问题是在小虎想提前定义一个list,然后作为index list来调用另一个list里面的变量出现的问题。 环境 Ubuntu 22.04 + python 3.10 故障代码示例 NoneList = [None] * opt.spatial_dims TargetMask = Target[i] == torch.arange(1...
数据结构 ——— 堆排序算法的实现
目录 前言 向下调整算法(默认建大堆) 堆排序算法的实现(默认升序) 前言 在之前几章学习了如何用向上调整算法和向下调整算法对数组进行建大/小堆数据结构 ——— 向上/向下调整算法将数组调整为升/降序_对数组进行降序排序代码…...
On-Chip-Network之Topology
片上网络拓扑决定了网络中节点和通道之间的物理布局和连接。拓扑对整体网络性价比的影响是巨大的。拓扑决定了消息 必须经过的跳数(或路由器)以及跳数之间的互连长度,从而显著影响网络延迟。由于经过路由器和链路会产生功耗,因此 …...
2024年11月21日Github流行趋势
项目名称:twenty 项目维护者:charlesBochet, lucasbordeau, Weiko, FelixMalfait, bosiraphael项目介绍:正在构建一个由社区支持的现代化Salesforce替代品。项目star数:21,798项目fork数:2,347 项目名称:p…...
第三十八章 IOT 通信协议MQTT协议实现的中间件EMQXDocker安装与验证指南
EMQX概述以及Docker安装与验证指南 一、EMQX概述 EMQX(原名EMQ X),是一款完全开源、高度可伸缩、高可用的分布式MQTT消息服务器。它不仅支持MQTT协议,还兼容CoAP/LwM2M等多种物联网协议,是5G时代万物互联的重要消息引擎。这款软件由杭州映云科技有限公司开发,基于Erlan…...
Flume日志采集系统的部署,实现flume负载均衡,flume故障恢复
目录 安装包 flume的部署 负载均衡测试 故障恢复 安装包 在这里给大家准备好了flume的安装包 通过网盘分享的文件:apache-flume-1.9.0-bin.tar.gz 链接: https://pan.baidu.com/s/1DXMA4PxdDtUQeMB4J62xoQ 提取码: euz7 --来自百度网盘超级会员v4的分享 ----…...
CodiMD导出pdf失败或无中文
CodiMD导出pdf失败,弹出文件保存窗口,有个pdf文件能下载,但是保存的时候提示“网站出问题了”,实际到服务器上看会发现docker崩溃了。 解决办法: 使用最新的CodiMD镜像,如nabo.codimd.dev/hackmdio/hackmd:…...
数字图像处理(2):Verilog基础语法
(1)Verilog常见数据类型: reg型、wire型、integer型、parameter型 (2)Verilog 常见进制:二进制(b或B)、十进制(d或D)、八进制(o或O)、…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
