java算法---五家共井

古代数学巨著《九章算数》中有这么一道题叫“五家共井,甲二绠(汲水用的井绳)不足,如(接上)乙一绠;乙三绠不足,如丙一绠;

丙四绠不足,如丁一绠;丁五绠不足,如戊一绠;戊六绠不足,如甲一绠,皆及。

意思就是说五家人共用一口井,甲家的绳子用两条不够,还要再用乙家的绳子一条才能打到井水;乙家的绳子用三条不够,还要再用丙家的绳子

一条才能打到井水;丙家的绳子用四条不够,还要再用丁家的绳子一条才能打到井水;丁家的绳子用五条不够,还要再用戊家的绳子一条才能打

到井水;戊家的绳子用六条不够,还要再用甲家的绳子一条才能打到井水。

最后问:井有多深?每家的绳子各有多长?

算法分析:根据题目可以列的一下方程(len为井深)

len1*2+len2 = len

len2*3+len3 = len

len3*4+len4 = len

len4*5+len5 = len

len5*6+len1 = len

进一步化简

len1=len2+len3/2

len2=len3+len4/3

len3=len4+len5/4

len4=len5+len1/5

从上面算式可以得到len3是2的倍数,len4是3的倍数,len5是4的倍数,len1是5的倍数。

代码实现:

package 练习;public class WJGJ{static void WJGJ(int[] len1, int[] len2, int[] len3, int[] len4,int[] len5, int[] len) // 五家共井算法
{for (len5[0] = 4;; len5[0] += 4)// len5为4的倍数for (len1[0] = 5;; len1[0] += 5) // len1为5的倍数
{len4[0] = len5[0] + len1[0] / 5;len3[0] = len4[0] + len5[0] / 4;if (len3[0] % 2 != 0 || len4[0] % 3 != 0)continue; // 如果不能被2整除或若不能被3整除,进行下一次循环
len2[0] = len3[0] + len4[0] / 3;if (len2[0] + len3[0] / 2 < len1[0])break; // 切回len5[0]循环(因为x太大了)if (len2[0] + len3[0] / 2 == len1[0]){len[0] = 2 * (len1[0]) + (len2[0]); // 计算井深return;}}}public static void main(String[] args){int[] len1 = { 0 };int[] len2 = { 0 };int[] len3 = { 0 };int[] len4 = { 0 };int[] len5 = { 0 };int[] len = { 0 };WJGJ(len1, len2, len3, len4, len5, len); // 求解算法
System.out.printf("五家共井问题求解结果如下:\n"); // 输出结果
System.out.printf("甲家井绳长度为:%d\n", len1[0]);System.out.printf("乙家井绳长度为:%d\n", len2[0]);System.out.printf("丙家井绳长度为:%d\n", len3[0]);System.out.printf("丁家井绳长度为:%d\n", len4[0]);System.out.printf("戌家井绳长度为:%d\n", len5[0]);System.out.printf("井深:%d\n", len[0]);}}

用c也可以实现

代码如下

namespace Test
{class Program{static void Main(string[] args){int a, b, c, d, e, h;a = b = c = d = e = h = 0;bool flag = true;while (flag){//4的倍数e += 4;a = 0;while (flag){//5的倍数a += 5;d = e + a / 5;c = d + e / 4;if (c % 2 != 0)continue;if (d % 3 != 0)continue;b = c + d / 3;if (b + c / 2 < a)break;if (b + c / 2 == a)flag = false;}}h = 2 * a + b;Console.WriteLine("a={0},b={1},c={2},d={3},e={4} ------h={5}\n", a, b, c, d, e, h);Console.Read();}}
}

 

转载于:https://www.cnblogs.com/oumyye/p/4302204.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

看雪逆向学习导航

---------------------------------------------------------------------------- 工具教程: OllyDbg IDA Windbg GDB 基本方法 参考资料 逆向原理 ----------------------------------------------------------------------------

viewController的生命周期

一、结构 按结构可以对iOS的所有ViewController分成两类&#xff1a; 1、主要用于展示内容的ViewController&#xff0c;这种ViewController主要用于为用户展示内容&#xff0c;并与用户交互&#xff0c;如UITableViewController&#xff0c;UIViewController。 2、用于控制和显…

android123 zhihuibeijing 新闻中心-新闻 页签 ViewPagerIndicator实现

## ViewPagerIndicator ## 使用导入ViewPagerIndicator库的方式相当于可以改源码&#xff0c;打包编译Eclips可以自动完成。ViewPager指针项目&#xff0c;在使用ViewPager的时候能够指示ViewPager所在的位置&#xff0c;就像Google Play中切换的效果一样&#xff0c;还能使用…

java 获取随机数字的三种方法

1 //方法1 (数据类型)2 //(最小值Math.random()*(最大值-最小值1))3 // 例:4 (int)(1Math.random()*(10-11)) //从1到10的int型随数5 6 方法2 获得随机数7 for (int i0;i<30;i)8 {9 System.out.println((int)(1Math.random()*10)); 10 } 11 (int)(1Math.random()*10) 1…

LVS原理及实践(NAT模式)

LVS无论NAT及DR模式&#xff0c;均要求LVS server和real server在同一个网段内&#xff0c;NAT需要把lvs server当作各个realserver的默认网关&#xff0c;DR模式采用修改mac地址直接从数据链路层转发、要求必须在同一个物理网段内 LVS-NAT的实验网络拓扑&#xff1a; 采用青…

基于Maven的spring_security入门

配置文件的修改点没什么变化&#xff0c;可以参考&#xff1a;http://blog.csdn.net/ouitiken/article/details/8830505 pom.xml的依赖参考&#xff1a; <dependencies><!-- Commons --><dependency><groupId>commons-dbcp</groupId><artifac…

使用Vitamio打造自己的Android万能播放器(5)——在线播放(播放优酷视频)

前言 为了保证每周一篇的进度&#xff0c;又由于Vitamio新版本没有发布&#xff0c; 决定推迟本地播放的一些功能&#xff08;截图、视频时间、尺寸等&#xff09;&#xff0c;跳过直接写在线播放部分的章节。从Vitamio的介绍可以看得出&#xff0c;其支持http、m3u8等多种网络…

20个新鲜出炉的网站模板【HTML PSD】

这里给大家分享20 个新鲜出炉的免费网站模板。这些设计元素将成为你下一个项目的重要素材&#xff0c;可以帮你节省很多的时间。与往常一样&#xff0c;我们经常漫游网络&#xff0c;寻找最好的资源&#xff0c; HTML、CSS 和 PSD 等等&#xff0c;记得关注啊。 您可能感兴趣的…

位运算总结(百科)

位运算 程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。 位运算 - 定义 在很多系统程序中常要求在位(bit)一级进行运算或处理。&#xff23;语言提供了位运算的功能&#xff0c; 这使得&#xff23;语言也能像汇编语…

归档(转)

如果是自定义类型的归档和解档&#xff0c;是按以下步骤实现如果不是自定义类型&#xff0c;直接第四步就可以。一、创建一个类User二、在User.h中遵循NSCoding协议 #import <Foundation/Foundation.h> interface User : NSObject<NSCoding> { int _userAge;//例子…

相遇

CPU直接识别的唯一语言是机器语言,为了克服机器语言的缺点,便将机器指令用便于记忆、并能描述指令功能的符号来表示称为指令助记符简称助记符 汇编语言由汇编指令,伪指令,和其它符号组成 汇编指令:机器码的助记符,有对应的机器码 伪指令:没有对应的机器码由编译器执行 其它符号…

相识

编译器&#xff1a;MASM 调试程序&#xff1a;DEBUG 编辑器&#xff1a;EditPlus

MySQL show命令的用法

show tables或show tables from database_name; // 显示当前数据库中所有表的名称show databases; // 显示mysql中所有数据库的名称show columns from table_name from database_name; 或show columns from database_name.table_name; // 显示表中列名称show grants for user_n…

怎么用代码制作WordPress的归档页面

先看看效果&#xff0c;这个是我网站的归档页面&#xff1a;http://www.shenjieblog.com/archives 其实WordPress自带了一个归档的功能&#xff0c;但是只能显示在网页中的某一个部分&#xff0c;但是我想单独制作一个归档页面&#xff0c;因为看见很多网站都有这个&#xff0c…

【web必知必会】—— 使用DOM完成属性填充

本文介绍了使用DOM的简单方法实现动态加载图片的功能。 前文介绍了&#xff1a; 1 DOM四个常用的方法 首先看一下效果&#xff0c;初始时是一个相册&#xff0c;可以点击导航&#xff0c;切换图片&#xff0c;并切换下方显示内容&#xff1a; 点击house&#xff0c;可以动态的切…

地址总线 数据总线

地址总线&#xff1a; CPU地址总线的宽度决定了它能寻址多少个内存单元地址,一个CPU有N根地址总线那么它的寻址能力为2^N次方。8086CPU地址总线宽度为20可寻址2^20次方个内存单元地址大小为1M。80386地址总线宽度为32可寻址内存为4GB 数据总线&#xff1a; CPU与存储器之间的数…

Spring事务配置方式(一) 拦截器方式配置

一、使用<tx:advice>和<aop:config>配置事务 <!-- 配置事务管理器 --><bean id"transactionManager" class"org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name"dataSource" ref&qu…

8086寄存器组

寄存器(14个)|AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES| >通用寄存器 数据寄存器(存放一般数据)AX (AH,AL) | BX (BH,BL) | CX (CH,CL) | DX (DH,DL) 指针寄存器 堆栈指针 基址指针SP BP (SS:SP) 变址寄存器 源地址 目的地址SI …

学习动态性能表(10)--v$session_longops

学习动态性能表 第十篇--V$SESSION_LONGOPS 2007.6.7 本视图显示运行超过6秒的操作的状态。包括备份&#xff0c;恢复&#xff0c;统计信息收集&#xff0c;查询等等。 要监控查询执行进展状况&#xff0c;你必须使用cost-based优化方式&#xff0c;并且&#xff1a; 设置TIME…