当前位置: 首页 > news >正文

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 = 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: 生成150之间的随机数。

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. 技术细节

 ~  在每次循环中:

 >  让用户猜测最小公倍数,并检查用户的猜测是否正确。

 >  让用户猜测最大公约数,并检查用户的猜测是否正确。

 >  计算这两个数的最大公约数和最小公倍数。

 >  显示这两个随机数。

 >  生成两个150之间的随机数 num1 和 num2

5. 小结

米粒最后对该游戏做了如下总结

该游戏通过生成两个150之间的随机数,利用欧几里得算法计算最大公约数(GCD)和公式 `(a * b) / gcd(a, b)计算最小公倍数(LCM,并通过 `printf` `scanf` 函数实现用户交互,使用 `do-while` 循环和 `if-else` 语句控制游戏流程,确保用户可以多次猜测并获得即时反馈。

相关文章:

13. 猜最大公约数最小公倍数小游戏

文章目录 概要整体架构流程技术名词解释技术细节小结 1. 概要 ~ Jack Qiao对米粒说&#xff1a;“今天咱们玩个小游戏&#xff0c;这个游戏的玩家需要猜出&#xff0c;两个随机生成的整数的最大公约数&#xff08;GCD&#xff09;和最小公倍数&#xff08;LCM&#xff09;。如…...

Git 多仓库提交用户信息动态设置

Git 多仓库提交用户信息动态设置 原文地址&#xff1a;dddhl.cn 前言 在日常开发中&#xff0c;我们可能需要同时管理多个远程仓库&#xff08;如 GitHub、Gitee、GitLab&#xff09;&#xff0c;而每个仓库使用不同的邮箱和用户名。比如&#xff0c;GitHub 和 Gitee 使用相…...

2024.6使用 UMLS 集成的基于 CNN 的文本索引增强医学图像检索

Enhancing Medical Image Retrieval with UMLS-Integrated CNN-Based Text Indexing 问题 医疗图像检索中&#xff0c;图像与相关文本的一致性问题&#xff0c;如患者有病症但影像可能无明显异常&#xff0c;影响图像检索系统准确性。传统的基于文本的医学图像检索&#xff0…...

了解Redis(第一篇)

目录 Redis基础 什么事Redis Redis为什么这么快 除了 Redis&#xff0c;你还知道其他分布式缓存方案吗? 说-下 Redis 和 Memcached 的区别和共同点 为什么要用Redis? 什么是 Redis Module?有什么用? Redis基础 什么事Redis Redis &#xff08;REmote DIctionary S…...

UE5 第一人称射击项目学习(二)

在上一章节中。 得到了一个根据视角的位置创建actor的项目。 现在要更近一步&#xff0c;对发射的子弹进行旋转。 不过&#xff0c;现在的子弹是圆球形态的&#xff0c;所以无法分清到底怎么旋转&#xff0c;所以需要把子弹变成不规则图形。 现在点开蓝图。 这里修改一下&…...

npm/cnpm的使用

npm 1、安装npm 前往nodejs官网下载安装node 验证是否安装成功node node -v node安装npm也会安装 npm -v 2、使用npm 1. 初始化项目 在一个项目文件夹中运行&#xff1a; npm init 根据提示输入项目信息&#xff08;如项目名称、版本号等&#xff09;。 如果你希望快速初…...

go-zero(六) JWT鉴权

go-zero JWT鉴权 还记得我们之前登录功能&#xff0c;返回的信息是token吗&#xff1f; 这个token其实就是JSON Web Token简称JWT,它是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;用于在网络应用环境间安全地传递声明信息。 它是一种基于 JSON 的令牌&#xf…...

做一个FabricJS.cc的中文文档网站——面向markdown编程

&#x1f4e2;欢迎点赞 &#xff1a;&#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;&#x1f4e2;本文作者&#xff1a;由webmote 原创&#x1f4e2;作者格言&#xff1a;新的征程&#xff0c;用爱发电&#…...

开发 + 安全:网络安全的协作方法

开发团队和安全团队之间由来已久的紧张关系一直是组织内部摩擦的根源。开发人员优先考虑速度和效率&#xff0c;旨在通过快节奏、迭代的开发周期快速交付功能和产品并高效前进。另一方面&#xff0c;安全团队努力平衡风险和创新&#xff0c;但必须专注于使用护栏保护敏感数据和…...

Next.js- App Router 概览

#题引&#xff1a;我认为跟着官方文档学习不会走歪路 一&#xff1a;App Router与Page Router 在 v13 版本中&#xff0c;Next.js 引入了一个基于 React 服务器组件 构建的新的 App Router&#xff0c;而在这之前&#xff0c;Next.js 使用的是Page Router。 目录结构 pages …...

python oa服务器巡检报告脚本的重构和修改(适应数盾OTP)有空再去改

Two-Step Vertification required&#xff1a; Please enter the mobile app OTPverification code: 01.因为巡检的服务器要双因子认证登录&#xff0c;也就是登录堡垒机时还要输入验证码。这对我的巡检查服务器的工作带来了不便。它的机制是每一次登录&#xff0c;算一次会话…...

【工控】线扫相机小结 第四篇

背景 这一片主要是对第三篇继续补充。话说上一篇讲到了两种模式的切换&#xff0c;上一篇还遗留了一个Bug&#xff0c;在这一篇里进行订正&#xff01; 代码回顾 /// <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...

数据结构 ——— 堆排序算法的实现

目录 前言 向下调整算法&#xff08;默认建大堆&#xff09; 堆排序算法的实现&#xff08;默认升序&#xff09; 前言 在之前几章学习了如何用向上调整算法和向下调整算法对数组进行建大/小堆数据结构 ——— 向上/向下调整算法将数组调整为升/降序_对数组进行降序排序代码…...

On-Chip-Network之Topology

片上网络拓扑决定了网络中节点和通道之间的物理布局和连接。拓扑对整体网络性价比的影响是巨大的。拓扑决定了消息 必须经过的跳数&#xff08;或路由器&#xff09;以及跳数之间的互连长度&#xff0c;从而显著影响网络延迟。由于经过路由器和链路会产生功耗&#xff0c;因此 …...

2024年11月21日Github流行趋势

项目名称&#xff1a;twenty 项目维护者&#xff1a;charlesBochet, lucasbordeau, Weiko, FelixMalfait, bosiraphael项目介绍&#xff1a;正在构建一个由社区支持的现代化Salesforce替代品。项目star数&#xff1a;21,798项目fork数&#xff1a;2,347 项目名称&#xff1a;p…...

第三十八章 IOT 通信协议MQTT协议实现的中间件EMQXDocker安装与验证指南

EMQX概述以及Docker安装与验证指南 一、EMQX概述 EMQX(原名EMQ X),是一款完全开源、高度可伸缩、高可用的分布式MQTT消息服务器。它不仅支持MQTT协议,还兼容CoAP/LwM2M等多种物联网协议,是5G时代万物互联的重要消息引擎。这款软件由杭州映云科技有限公司开发,基于Erlan…...

Flume日志采集系统的部署,实现flume负载均衡,flume故障恢复

目录 安装包 flume的部署 负载均衡测试 故障恢复 安装包 在这里给大家准备好了flume的安装包 通过网盘分享的文件&#xff1a;apache-flume-1.9.0-bin.tar.gz 链接: https://pan.baidu.com/s/1DXMA4PxdDtUQeMB4J62xoQ 提取码: euz7 --来自百度网盘超级会员v4的分享 ----…...

CodiMD导出pdf失败或无中文

CodiMD导出pdf失败&#xff0c;弹出文件保存窗口&#xff0c;有个pdf文件能下载&#xff0c;但是保存的时候提示“网站出问题了”&#xff0c;实际到服务器上看会发现docker崩溃了。 解决办法&#xff1a; 使用最新的CodiMD镜像&#xff0c;如nabo.codimd.dev/hackmdio/hackmd:…...

数字图像处理(2):Verilog基础语法

&#xff08;1&#xff09;Verilog常见数据类型&#xff1a; reg型、wire型、integer型、parameter型 &#xff08;2&#xff09;Verilog 常见进制&#xff1a;二进制&#xff08;b或B&#xff09;、十进制&#xff08;d或D&#xff09;、八进制&#xff08;o或O&#xff09;、…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...