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

经典算法题每日演练——第二题 五家共井

 

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

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

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

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

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

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

 

分析:同样这套题也是属于不定方程,拿这个题目的目地就是让大家能够在不定方程组这种范畴问题上做到“举一反三”,根据题意

        我们设井深为h,各家分别为a,b,c,d,e,则可以列出如下方程组:

        2a+b=h   ①

        3b+c=h   ②

        4c+d=h   ③

        5d+e=h   ④

        6e+a=h   ⑤

首先我们看下普通青年的想法,他们的想法是找a,b,c,d,e之间的对应关系

依次将②代入①,③代入②,④代入③,⑤代入④可得如下方程组:

      a=b+c/2  

      b=c+d/3   

      c=d+e/4   

      d=e+a/5   

从计算机的角度来说,我不希望有小数的出现,所以我可推断: c一定是2的倍数,d一定是3的倍数,e一定是4的倍数,a一定是5的倍数,根据这种关系我们

就可以有如下代码:

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();
        }
    }
}

同样我们的时间复杂度是O(N2),急需优化。

 

我们再来看看文艺青年的想法,他们的想法是找a,b,c,d,e中的某个数与h的对应关系。

比如我就找c与h的对应关系,上面的①②③④⑤可写成如下方程组:

     b=h-2a   ⑥

     c=h-3b   ⑦

     d=h-4c   ⑧

     e=h-5d   ⑨

     a=h-6e   ⑩

将⑥,⑧,⑨,⑩分别代入⑦,一阵痉挛后可知:

     c=(148/721)h

上面的公式也就表明了c和h的比例关系,我们令 h=721k,则 c=148k,将其代入⑥,⑦,⑧,⑨,⑩可得如下方程组

     a=265k

     b=191k

     c=148k

     d=129k

     e=76k

     x=721k

又因为k>0,所以题目有无数个解。这里我就取0<k<5,否则绳子已经到达极限了,需要用蛟龙号去深潜了。

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int k = 1; k < 5; k++)
            {
                int h = 721 * k;

                int a = 265 * k;

                int b = 191 * k;

                int c = 148 * k;

                int d = 129 * k;

                int e = 76 * k;

                Console.WriteLine("a={0},b={1},c={2},d={3},e={4} ------h={5}\n", a, b, c, d, e, h);
            }

            Console.Read();
        }
    }
}

 

相信大家以后遇到类似的问题,应该会胸有成竹了。

相关文章:

  • 利用接口给任意对象进行排序
  • 我们也说说Android.mk(5) - 计算怎么办?
  • 一些小脚本与正则表达式
  • 【案例】常驻查询引发的thread pool 性能问题之一
  • ASP.NET Core的身份认证框架IdentityServer4(6)- 开始
  • maven - pom.xml 聚合(父)工程 基本内容演示
  • service
  • 波特率时钟
  • HBase的一些关于CRUD方法
  • 自动化测试基础篇--Selenium单选框(Radio)复选框(CheckBox)
  • 基于图论的立体匹配方法研究----绪论
  • rails migration 增加索引
  • len(),range()函数
  • 长城电脑整体解决方案护航智慧城市安全
  • Java语法基础--运算
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 2017年终总结、随想
  • Angular4 模板式表单用法以及验证
  • ERLANG 网工修炼笔记 ---- UDP
  • ES学习笔记(12)--Symbol
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JavaScript实现分页效果
  • JS函数式编程 数组部分风格 ES6版
  • JS专题之继承
  • php ci框架整合银盛支付
  • PHP 的 SAPI 是个什么东西
  • React-生命周期杂记
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • use Google search engine
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 高性能JavaScript阅读简记(三)
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 警报:线上事故之CountDownLatch的威力
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 如何设计一个比特币钱包服务
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • ​flutter 代码混淆
  • ​Python 3 新特性:类型注解
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #微信小程序(布局、渲染层基础知识)
  • (31)对象的克隆
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (力扣题库)跳跃游戏II(c++)
  • (全注解开发)学习Spring-MVC的第三天
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (未解决)macOS matplotlib 中文是方框
  • (一)Neo4j下载安装以及初次使用
  • (转)树状数组
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET Standard 的管理策略