有趣的算法

目录:

1、百钱买百鸡

2、韩信点兵

1)概述   2)正常取余算法   3)循环算法


1、百钱买百鸡

我国古代《算经》中的“百钱买百鸡”问题:

鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?

分析:

用数学方法解决。设鸡翁(公鸡)x只,鸡母(母鸡)y只,鸡雏(鸡仔)z只,可得到方程组如下:

作为限制条件,应该有:

0 ≤ x ≤ 20鸡翁不可能超过20只,均为正整数20只 是100钱
0 ≤ y ≤ 33鸡母不可能超过33只,均为正整数33只是99钱
0 ≤ z ≤ 100鸡雏不可能超过100只,均为正整数必须为3的整倍数

运算量不大,可以利用三重循环得到结果。

#include <stdio.h>
#include <math.h>int accord( int i, int j, int k )
{if( 5*i + 3*j + k/3 == 100 && k%3 ==0 && i+j+k == 100 )return 1;      //如果是百钱百鸡,返回1,正确的结果elsereturn 0;    //如果不是,返回0
}int main(void)
{int i, j, k;      //i:鸡翁数;  j:鸡母数;  k:鸡雏数printf("100yuan for 100 chick:\n");for( i = 0; i <= 20; i++ )for( j = 0; j <= 33; j++ )for( k = 0; k <= 100; k++ )if( accord( i, j, k ) ){printf("cock:%d\n",i);printf("hen:%d\n",j);printf("chicken:%d\n",k);}return 1;
}

C-Free验证代码:

C-Free代码下载地址:有趣的算法合集-1百钱买百鸡

2、韩信点兵

1)概述

韩信带1500名兵士打仗,战死四五百人,站3人一排,多出2人;站5人一排,多出4人;站7人一排,多出6人。韩信马上说出人数:1049。

首先我们来了解一下同余的概念。a和b关于c同余,意思是说a除以c和b除以c的余数相同。例如:8÷5 = 1余3,3÷5 = 0余3,所以8和3关于5同余,写作8 ≡ 3(mod 5),其中mod读作“模”。而且,由于3小于5,所以3本身就是3除以5的余数,因此8 ≡ 3(mod 5)也可以理解为8除以5的余数是3。

这样,韩信点兵问题就可以表示为数学语言了。有一个数字x,除以3余2,除以5余3,除以7余2, 那么这个数字是多少?数学写法是

对于这个问题,最基本的解法是穷举法,就是把满足每个条件的数字写出来,然后找到相同的数字。

除以3余数是2的数字有:2、5、8、11、14、17、20、23、26…

除以5余数是3 的数字有:3、8、13、18、23、28…

除以7余数是2的数字有:2、9、16、23、30…我们发现,满足三个条件的第一个数字是23。所以23是这个问题的一个解。

但是,这个问题的解并不是唯一的。3、5、7彼此互质,它们的最小公倍数是105。也就是说,105除以3、除以5或者除以7都没有余数。如果一个数字x是满足要求的,那么在x上加上几个105都不会改变它对3、5、7的余数。比如,23是满足要求的,那么23+105 = 128也是满足要求的,23+210 = 233也是满足要求的。

所以这个问题最后的解就是23+105n,其中n = 0,1,2,3…

2)正常取余算法

//正常取余算法
#include <stdio.h>
#include <math.h>int main(void)
{int x, y, z;int i;scanf("%d%d%d", &x, &y, &z);for (i = 0; i <= 1500; i++){if (i%3 == x && i%5 == y && i%7 == z){printf("%d\n", i);}}if (i > 10000)printf("No answer");
}

C-Free验证代码:  

3)循环算法

//循环算法
#include <stdio.h>
int main(void)
{int a,b,c;int x,y,z,j;int i;int f=0;scanf("%d%d%d",&a,&b,&c);for(i=3;i<=34;i++){int sum=3*i+a;for(j=2;j<=20;j++){if(((j*5)+b)==sum&&f==0){for(z=1;z<15;z++){if(((z*7)+c)==sum&&f==0){printf("%d",sum);f=1;break;}}	}if(f==1)break;}if(f==1)break;}if(f==0)printf("No answer");return 0;
}

C-Free验证代码: 

C-Free代码下载地址:有趣的算法合集-2韩信点兵。


路虽远,行则将至;事虽难,做则可成。觉得不错,动动发财的小手点个赞哦!

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

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

相关文章

《梦醒蝶飞:释放Excel函数与公式的力量》9.2 FV函数

9.2 FV函数 FV函数是Excel中用于计算投资或贷款在若干期后的未来值的函数。它是一个非常实用的财务函数&#xff0c;能够帮助我们快速计算投资的最终价值或贷款的期末余额。 9.2.1 函数简介 FV函数用于计算基于定期固定支付和固定利率的投资或贷款的未来值。未来值是指在一定…

【电商纯干货分享】干货速看!电商数据集数据API接口数据分析大全!

数据分析——深入探索中小企业数字化转型&#xff0c;专注提供各行业数据分析干货、分析技巧、工具推荐以及各类超实用分析模板&#xff0c;为钻研于数据分析的朋友们加油充电。 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09…

初学嵌入式是弄linux还是单片机?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;1、先入门了51先学了89c52…

白嫖A100-interLM大模型部署试用活动,亲测有效-2.Git

申明 以下部分内容来源于活动教学文档&#xff1a; Docs git 安装 是一个开源的分布式版本控制系统&#xff0c;被广泛用于软件协同开发。程序员的必备基础工具。 常用的 Git 操作 git init 初始化一个新的 Git 仓库&#xff0c;在当前目录创建一个 .git 隐藏文件夹来跟踪…

Linux|信号

Linux|信号 信号的概念信号处理的三种方式捕捉信号的System Call -- signal 1.产生信号的5种方式2.信号的保存2.1 core 标志位 2.信号的保存2.1 对pending 表 和 block 表操作2.2 阻塞SIGINT信号 并打印pending表例子 捕捉信号sigaction 函数验证当前正在处理某信号&#xff0c…

3-3 超参数

3-3 超参数 什么是超参数 超参数也是一种参数&#xff0c;它具有参数的特性&#xff0c;比如未知&#xff0c;也就是它不是一个已知常量。是一种手工可配置的设置&#xff0c;需要为它根据已有或现有的经验&#xff0c;指定“正确”的值&#xff0c;也就是人为为它设定一个值&…

Linux系统的服务——以Centos7为例

一、Linux系统的服务简介 服务是向外部提供对应功能的进程&#xff0c;其运行在系统后台&#xff0c;能够7*24小时持续不断的提供外界随时发来的服务请求&#xff0c;且服务进程常驻在内存中&#xff0c;具有固定的端口号&#xff0c;通过端口号就能找到服务内容。 提供服务的一…

2000-2022年地级市数字经济指数(含控制变量)

2000-2022年地级市数字经济指数&#xff08;含控制变量&#xff09; 目录 数字经济对区域经济发展的影响实证研究 一、引言 二、文献综述 三、数据来源与变量说明 四、实证模型 五、程序代码与运行结果 数字经济对区域经济发展的影响实证研究 摘要&#xff1a; 本文旨在…

Ubuntu防火墙相关内容

Ubuntu防火墙相关的命令&#xff0c;主要用于日常使用过程中&#xff0c;忘记命令时查找方便&#xff0c;不用再去各种地方搜索了。以下命令均已root用户执行&#xff0c;如果是非root用户&#xff0c;需要添加sudo 查看防火墙的启用状态 ufw status 说明是启用状态。 启用防…

Fish Speech: 开源文本转语音技术(TTS)的新里程碑

简介 Fish Speech 是一个全新的文本转语音(TTS)解决方案&#xff0c;该项目由fishaudio开发。当前模型使用约十五万小时三语数据训练&#xff0c;对中文支持非常的完美。 能够熟练处理和生成中文、日语和英语的语音&#xff0c;语言处理能力接近人类水平&#xff0c;并且声音…

代码随想录算法训练营第4天|LeetCode24,19,02,07,142

24.交换链表结点 题目链接&#xff1a;24. 两两交换链表中的节点 - 力扣&#xff08;LeetCode&#xff09; 文章链接&#xff1a;代码随想录 (programmercarl.com) 视频链接&#xff1a;代码随想录算法公开课 | 最强算法公开课 | 代码随想录 第一想法 正常模拟&#xff0c;先画…

算法金 | 欧氏距离算法、余弦相似度、汉明、曼哈顿、切比雪夫、闵可夫斯基、雅卡尔指数、半正矢、Sørensen-Dice

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 抱个拳&#xff0c;送个礼 在算法模型构建中&#xff0c;我们经常需要计算样本之间的相似度&#xff0c;通常的做法是计算样本之间的距…

性价比蓝牙耳机排行榜前十名有哪些?十大性价比蓝牙耳机榜单盘点

作为使用真无线蓝牙耳机长达5-6年的资深爱好者&#xff0c;我始终对音频技术和产品的创新保持着浓厚的兴趣&#xff0c;最近&#xff0c;我投入了一笔不小的资金&#xff0c;超过大几千元&#xff0c;用于深入测试和评估市面上多款来自各大品牌的真无线蓝牙耳机&#xff08;包括…

EtherCAT转Profinet网关配置说明第一讲:配置软件安装及介绍

网关XD-ECPNS20为EtherCAT转Profinet协议网关&#xff0c;使EtherCAT协议和Profinet协议两种工业实时以太网网络之间双向传输 IO 数据。适用于具有EtherCAT协议网络与Profinet协议网络跨越网络界限进行数据交换的解决方案。 本网关通过上位机来进行配置。 首先安装上位机软件 一…

用递归解决冒泡排序问题

冒泡排序是种很简单的排序方式. 如果用循环方式, 通常就是两层循环. 由于两层循环都是与元素个数 N 线性相关, 所以可以简单估算出它的时间复杂度是 O(N2), 通常而言, 这是较糟糕的复杂度. 当然, 这也几乎是所有简单方式的宿命, 想简单就别想效率高! 前面篇章说到递归也是一种循…

基于Java技术的人事管理系统

你好&#xff0c;我是专注于计算机科学领域的小野。如果你对人事管理系统感兴趣或有相关需求&#xff0c;欢迎私信交流。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; B/S模式、Java技术、SpringBoot 工具&#xff1a; Eclipse、MySQL、浏览…

【C++:类的基础认识和this指针】

C的类与C语言的struct结构体有啥区别&#xff1f; 默认的访问限定符不同 类的简要 关键字&#xff1a;class{}里面是类的主体&#xff0c;特别注意&#xff1a;{}后面的&#xff1b;不可以省略类中的变量叫做成员变量&#xff0c;类中的函数叫做成员函数类中访问有三种访问权限…

HTML5使用<blockquote>标签:段落缩进

使用<blockquote>标签可以实现页面文字的段落缩进。这一标签也是每使用一次&#xff0c;段落就缩进一次&#xff0c;并且可以嵌套使用&#xff0c;以达到不同的缩进效果。语法如下&#xff1a; <blockquote>文字</blockquote> 【实例】使用<blockquote&…

谷粒商城----通过缓存和分布式锁获取数据。

高并发下缓存失效的问题 高并发下缓存失效的问题--缓存穿透 指查询一个一定不存在的数据&#xff0c;由于缓存是不命中&#xff0c;将去查询数据库&#xff0c;但是数据库也无此记录&#xff0c;我们没有将这次查询的不写入缓存&#xff0c;这将导致这个不存在的数据每次请求…

工厂模式之简单工厂模式

文章目录 工厂模式工厂模式分为工厂模式的角色简单工厂模式案例代码定义一个父类&#xff0c;三个子类定义简单工厂客户端使用输出结果 工厂模式 工厂模式属于创造型的模式&#xff0c;用于创建对象。 工厂模式分为 简单工厂模式&#xff1a;定义一个简单工厂类&#xff0c;根…