热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

4GL算法【列举法-百钱买百鸡,递归法-小猴吃枣】

1.滴水不漏——列举法破解难题示例:百钱买百鸡公鸡3元每只,母鸡5元每只,小鸡1元3只,一百元钱买一百只鸡。请求出公鸡,母鸡和小鸡的数目?编程简析:我们做最极端的假设,公鸡可能是0-100,母鸡也可
1. 滴水不漏——列举法破解难题

示例:百钱买百鸡
公鸡3元每只,母鸡5元每只,小鸡1元3只,一百元钱买一百只鸡。请求出公鸡,母鸡和小鸡的数目?
编程简析:
我们做最极端的假设,公鸡可能是0-100,母鸡也可能是0-100,小鸡还可能是0-100,
将这三种情况用循环套起来,那就是1000000种情况。这就是列举法。
为了将题目再简化一下,我们还可以对上述题目进行一下优化处理:

假设公鸡数为x,母鸡数为y,则小鸡数是100-x-y,也就有了下面的方程式:
3*x+5*y+(100-x-y)/3=100
从这个方程式中,我们不难看出大体的情况:公鸡最多有33只,最少是没有,即x的范围是0-33;母鸡最多20只,最少0只,即母鸡的范围是0-20;有了公鸡母鸡,小鸡数自然就是100-x-y只。可能的方案一共有34*21种,在这么多的方案中,可能有一种或几种正好符合相等的条件。电脑怎样工作呢?计算机事实上就是将上述34*21种方案全部过滤一遍,找出符合百钱买百鸡条件的(也即上式),只要符合,这就是我们要的输出结果。

MAIN  
DEFINE x,y,z INTEGER
DEFINE l_result string
FOR x=0 TO 33 STEP+1
FOR y=0 TO 20 STEP+1
LET z= 100-x-y
IF 3*x+5*y+z/3 =100 THEN
LET l_result = "公鸡,母鸡和小鸡数分别为:",x USING '####',y USING '####', z USING '####'
DISPLAY l_result
END IF
END FOR
END FOR
END MAIN
结果如下:
fglrun cxm_cxmi999t.42m
公鸡,母鸡和小鸡数分别为: 4 12 84
公鸡,母鸡和小鸡数分别为: 11 8 81
公鸡,母鸡和小鸡数分别为: 18 4 78
公鸡,母鸡和小鸡数分别为: 25 75

2. 镜里照镜——递归法破解难题

示例:小猴吃枣

小猴第一天摘下若干枣子,当即吃掉了一半,不过瘾又多吃了一个;第二天吃了剩下的一半又多吃了一个;以后每一天都吃了前一天剩下的一半多一个。到第十天小猴再想吃时,见到只剩下一只枣子了。问第一天这堆枣子有多少?

从上题中我们可看到一个令人欣喜的规律,第十天为1,第九到第一天中后一天与1的和的两倍与前一天相等。下面就对这一规律做了描述:

DEFINE g_result    INTEGER
MAIN
DEFINE i INTEGER
DEFINE l_result INTEGER
FOR i=10 TO 1 STEP -1
CALL monkey(i) RETURNING l_result
LET g_result = l_result
DISPLAY "第",i USING '##'," 天这堆枣的个数为:",g_result USING '####个'
END FOR
END MAIN

FUNCTION monkey(p_num)
DEFINE p_num,monkey INTEGER
IF p_num >=10 THEN
LET mOnkey= 1
ELSE
LET mOnkey= 2 * (g_result + 1)
END IF
RETURN monkey
END FUNCTION
结果如下:
fglrun cxm_cxmi999t.42m
第10 天这堆枣的个数为: 1个
第 9 天这堆枣的个数为: 4个
第 8 天这堆枣的个数为: 10个
第 7 天这堆枣的个数为: 22个
第 6 天这堆枣的个数为: 46个
第 5 天这堆枣的个数为: 94个
第 4 天这堆枣的个数为: 190个
第 3 天这堆枣的个数为: 382个
第 2 天这堆枣的个数为: 766个
第 1 天这堆枣的个数为:1534个


 


推荐阅读
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 一、MyEclipse中的一些常用的快捷键:ctrl+shift+x大写ctrl+shift+y小写alt+内容提示写住方法的时候可以先写main然后按alt+就可以了ctrl+1 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
  • 联系人:石虎QQ:1224614774昵称:嗡嘛呢叭咪哄*简单约束*CREATETABLEIFNOTEXISTSt_student(idINTEGERPRIMARYKEYAUTOI ... [详细]
  • 编程题目是:定义一个整数计算类Integer,实现短整数+,-,*,基本算术运算。要求可以进行数据范围检查(-32768~32767,或自行设定),且在数据溢出时显示错误信息并中断程序执行。 ... [详细]
  • Java中处理大数据问题(BigInteger、BigDecimal)
    原文转自:https:blog.csdn.netzhongkeleearticledetails52289163;http:www.cnblogs.c ... [详细]
  • 在实际项目中有时候需要判断输入的值是否全为数字,然而直接用判断数字的一些函数如Val()和Isnumeric()等对"+"号,"-"号,还有小数点不能直接过滤 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
author-avatar
百变精灵110
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有