C语言小游戏——3、寻找大公约和小公倍的多种求法

这篇具有很好参考价值的文章主要介绍了C语言小游戏——3、寻找大公约和小公倍的多种求法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、最大公约数有四种求解:

法 一:暴力求解

法 二:更相减损法

法 三:辗转相除法

二、最小公倍数有两种求解:

法 一:暴力求解

法 二:公式法


一、最大公约数有四种求解:

什么是最大公约数呢?定义如下:
如果数 a 能被数 b 整除,a 就叫做 b 的倍数,b 就叫做 a 的约数几个整数中公有的约数,叫做这几个数的公约数;其中最大的一个,叫做这几个数的最大公约数

例:12、18的公约数有1、2、3、6,其中最大的一个是6,则6是12与18的最大公约数。

法 一:暴力求解

从上面举的例子我们可以分析,最大公约数一定不会大于两个数之间的最小数,最大也就是两个数的最小值,如20、40的最大公约数是20。

思路:

所以我们可以令两个数的最小值为最大公约数,然后我们再用两个数分别除去这两个数的最小值,如果都能整除,则就是最大公约数,否则就自减 1 再去除,判断是否能整除,不能就再自减1,一直循环下去直到找到都能被整除的数。(最坏的情况就是找到1停止)

比如上面的12、18这俩个数,这两个数的最小值是12,则定义变量tmp=12,然后判断12、18是否都能整除变量tmp。
tmp=12,不能被整除,自减1
tmp=11,不能被整除,自减1
tmp=10,不能被整除,自减1
tmp=9,不能被整除,自减1
tmp=8,不能被整除,自减1
········
tmp=6,都能被12、18整除
所以找到最大公约数了,12,18的最大公约数是6。

代码实现:

int main()
{
	int a = 0, b = 0;
	printf("请输入数字:");
	scanf("%d %d", &a, &b);
	int tmp = a < b ? a : b;//把两个数的最小值赋给tmp
	{
		while (1)
		{
			if (a % tmp == 0 && b % tmp == 0)
			{
				break;//找到最大公约数了,跳出循环
			}
			tmp--;//两个数都不能整除,自减1
		}
		printf("最大公约数为:%d", tmp);
	}
	return 0;
}

法 二:更相减损法

更相减损法:也叫更相减损术,是出自《九章算术》的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合。

思路:
以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到它们两个数相等为止。则相等的两个数就是所求的最大公约数。

代码实现:

int main()
{
	int x = 0, y = 0;
	printf("请输入两个数字:");
	scanf("%d%d",&x,&y);
	while (x != y)  //两个数不相等就一直循环
	{
		if (x > y)
		{
			x = x - y;
		}
		else if (x < y)
		{
			y = y - x;
		}
	}
	//到这里则是两个数相等,取其任何一个就是最大公约数
	printf("最大公约数是:%d\n", x);
	return 0;
}

法 三:辗转相除法

思路:用辗转相除法求几个数的最大公约数,可以先求出其中任意两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次求下去,直到最后一个数为止。最后所得的那个最大公约数,就是所有这些数的最大公约数。

代码实现:以三个数为例

int main()
 {
    int x = 0, y = 0, z = 0;
    int tmp = 0;
    // 输入三个整数
    printf("请输入三个数字:");
    scanf("%d %d %d", &x, &y, &z);
    // 计算第一个数和第二个数的最大公约数
    while (y != 0) 
    {
        tmp = x % y;
        x = y;
        y = tmp;
    }
    // 计算得到的最大公约数与第三个数的最大公约数作比较
    while (z != 0) 
    {
        tmp = x % z;
        x = z;
        z = tmp;
    }
    // 输出结果
    printf("三个数的最大公约数是:%d\n", x);
    return 0;
}

二、最小公倍数有两种求解:

几个数共有的倍数叫做这几个数的公倍数,其中除0以外最小的一个公倍数,叫做这几个数的最小公倍数。

举几个例子:12、18的最小公倍数是36
 

法 一:暴力求解

通过上面举的例子我们可以发现 最小公倍数一定大于或等于两个数的最大值。

思路:所以我们可以先找出两个数的最大值,然后赋值给变量tmp,然后用变量tmp分别除去两个数,如果能整除,则就是最小公倍数,否则变量tmp自加1,再分别除去两个数,判断是否能整除,一直循环下去,直到变量tmp都能够整除两个数。

比如12、18这两个数,这两个数的最大值是18,则定义变量tmp=18,然后判断变量tmp是否都能整除12、18。
tmp=18,不能整除12、18,自加1
tmp=19,不能整除12、18,自加1
tmp=20,不能整除12、18,自加1
tmp=21,不能整除12、18,自加1
tmp=22,不能整除12、18,自加1
········
tmp=36,都能整除12、18
所以找到最小公倍数了,12,18的最小公倍数是36。

代码实现

int main()
{
	int a = 0, b = 0;
	printf("请输入两个数字:");
	scanf("%d %d", &a, &b);
	int tmp = a > b ? a : b;
	while (1)
	{
		if (tmp % a == 0 && tmp % b == 0)
		{
			break;
		}
		tmp++;
	}
	printf("最小公倍数:%d", tmp);
	return 0;
}

法 二:公式法

由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积。
所以,求两个数的最小公倍数,就可以先求出它们的最大公约数,然后用两个数的积除去最大公约数得出它们的最小公倍数
因此我们可以利用上面任何一种求最大公约数的方法来实现,先求最大公约数然后再求最小公倍数。

int Fun(int x, int y)
{
	if (x > y)
	{
		return Fun(y, x - y);  //再开辟一个Fun函数
	}
	else if (x < y)
	{
		return Fun(x, y - x);   //再开辟一个Fun函数
	}
	else   //找到相减到相等
	{
		return x;
	}
}
int main()
{
	int x = 0, y = 0;
	printf("请输入两个数字:");
	scanf("%d%d", &x, &y);
	int ret = Fun(x, y);
	printf("最大公约数是:%d\n", ret);
	printf("最小公倍数是:%d\n", x * y / ret);  //利用公式法,直接求出
	return 0;
}

淦碗鸡汤!!!文章来源地址https://www.toymoban.com/news/detail-819744.html

到了这里,关于C语言小游戏——3、寻找大公约和小公倍的多种求法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 扫雷小游戏【C语言】

    目录 前言 一、基本实现逻辑 二、实现步骤 1. 我们希望在进入游戏时有一个菜单让我们选择 2. 我们希望可以重复的玩(一把玩完了还可以接着玩) 3. 采用多文件形式编程  4.要扫雷先得有棋盘(创建棋盘R*N) 5.初始化棋盘  6.打印棋盘 7.设置雷 8.排查雷 三、全部源码: 上期

    2024年02月11日
    浏览(61)
  • C语言:扫雷小游戏

    文接上一篇博文C语言:三子棋小游戏。本篇博文是使用C语言来实现扫雷小游戏的。这里不对扫雷的规则进行赘述。玩家通过键盘输入坐标来探雷。博主在实现扫雷之前从未看过扫雷实现的相关视频,所以这里实现的扫雷完全是博主的原生思路,具有逻辑性。下面详细介绍一

    2024年02月09日
    浏览(62)
  • C语言小游戏——扫雷

            结合前边我们所学的C语言知识,本期我们将使用C语言实现一个简单的小游戏——扫雷 目录 前言 总体框架设计 多文件分装程序 各功能模块化实现 初始化棋盘  棋盘打印 埋雷  判赢与排雷 游戏逻辑安排 总结         和三子棋相同,游戏开始时不需要任何判

    2024年02月06日
    浏览(53)
  • C语言简易小游戏

    本篇博客将带领大家自己动手写一下一些C语言小游戏;以增加对于C语言的兴趣😀😀😀😀😀 首先呢我们先来简单介绍一下这个小游戏: 通常由两个人玩,一方出数字,一方猜。出数字的人要想好一个没有重复数字,不能让猜的人知道。猜的人就可以开始猜。 如正确答案为

    2024年02月07日
    浏览(39)
  • 三子棋小游戏---(C语言)

    目录 前言: 1.菜单的打印 2.三子棋构思 3.实现三子棋 3.1使用宏的方式定义数组 3.2打印棋盘 3.3玩家下棋 3.4电脑随机下棋 3.5判断结局 4.源码 4.1test.c 4.2game.c  4.3game.h  ❤博主CSDN:啊苏要学习   ▶专栏分类:C语言◀   C语言的学习,是为我们今后学习其它语言打好基础,C生万物

    2024年02月03日
    浏览(82)
  • C语言三子棋小游戏

    哈喽,大家好,今天我们要利用之前所学习的C语言知识来写一个三子棋小游戏。 目录 1.游戏 2.函数部分 2.1.菜单 2.2.初始化棋盘 2.3.打印棋盘 2.4.玩家下棋 2.5.电脑下棋 2.6.判断输赢 2.7.判断棋盘是否已满 3.完整代码展示 今天我们写的代码分为三个文件来写,分别是: game.h 用来

    2024年02月04日
    浏览(45)
  • C语言:三子棋小游戏

    目标很简单:实现一个 三子棋小游戏。三子棋大家都玩过,规则就不提及了。本博文中实现的三子棋在对局中,电脑落子是随机的,不具有智能性,玩家的落子位置使用键盘输入坐标。下面开始详细介绍如何实现一个简单的三子棋游戏。 想要实现一个小游戏,第一件事就是

    2024年02月09日
    浏览(57)
  • C语言——贪吃蛇小游戏

    目录 一、ncurse 1.1 为什么需要用ncurse: 1.2 ncurse的输入输出: 1.2.1 如何使用ncurse: 1.2.2 编译ncurse的程序: 1.2.3 测试输入一个按键ncurse的响应速度: 1.3 ncurse上下左右键获取: 1.3.1 如何查看宏定义的.h文件: 1.3.2 ncurse上下左右键获取: 二、地图规划 2.1 地图规划算法显示第一

    2024年02月07日
    浏览(41)
  • 【C语言】小游戏-三字棋

    大家好,我是深鱼~ 目录 一、游戏介绍  二、文件分装  三、代码实现步骤 1.制作简易游戏菜单  2.初始化棋盘 3.打印棋盘 4.玩家下棋 5.电脑随机下棋 6.判断输赢 7.判断棋盘是否满了  四、完整代码 game.h(相关函数的声明,整个代码要引用的头文件以及宏定义) game.c(实现游戏的

    2024年02月13日
    浏览(28)
  • 【C语言小游戏】贪吃蛇

      使⽤C语⾔在Windows环境的控制台中模拟实现经典⼩游戏贪吃蛇 实现基本的功能: 贪吃蛇地图绘制 蛇吃⻝物的功能 (上、下、左、右⽅向键控制蛇的动作) 蛇撞墙死亡 蛇撞⾃⾝死亡 计算得分 蛇⾝加速、减速 暂停游戏 游戏指引页面 游戏页面 指针; 动态内存; 结构体;

    2024年01月19日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包