“鸡翁一值钱5,鸡母一值钱3,鸡雏三值钱1。百钱买百鸡,问鸡翁、母、雏各几何?”java穷举法解题

穷举法概述(这是引用百度的介绍
穷举法是一种针对于 密码的破译方法。这种方法很像数学上的“ 完全归纳法”并在 密码破译方面得到了广泛的应用。简单来说就是将密码进行逐个推算直到找出真正的密码为止。 比如一个四位并且全部由数字组成其密码共有10000种组合,也就是说最多我们会尝试9999次才能找到真正的密码。利用这种方法我们可以运用计算机来进行逐个推算,也就是说用我们破解任何一个密码也都只是一个时间问题。
当然如果破译一个有8位而且有可能拥有大小写字母、数字、以及 符号的密码用普通的家用电脑可能会用掉几个月甚至更多的时间去计算,其组合方法可能有几千万亿种组合。这样长的时间显然是不能接受的。其解决办法就是运用字典,所谓“字典”就是给密码锁定某个范围,比如英文单词以及生日的数字组合等,所有的英文单词不过10万个左右这样可以大大缩小密码范围,很大程度上缩短了破译时间。
在一些领域,为了提高密码的破译效率而专门为其制造的 超级计算机也不在少数,例如 IBM美国军方制造的“ 飓风”就是很有代表性的一个。
穷举法解题,就是按照某种方式列举问题答案的过程。针对问题的数据类型而言,常用的列举方法一有如下三种:
(1)顺序列举 是指答案范围内的各种情况很容易与自然数对应甚至就是自然数,可以按自然数的变化顺序去列举。
(2)排列列举 有时答案的数据形式是一组数的排列,列举出所有答案所在范围内的排列,为排列列举。
(3)组合列举 当答案的数据形式为一些元素的组合时,往往需要用组合列举。组合是无序的。
例子如下:在公元五世纪我国数学家张丘建在其《算经》一书中提出了“百鸡问题 ”:
这个数学问题的数学方程可列出如下:
Cock+Hen+Chick=100
Cock*5+Hen*3+Chick/3=100
显然这是个不定方程,适用于穷举法求解。依次取Cock值域中的一个值,然后求其他两个数,满足条件就是解。

该问题用java程序算法如下:
int Cock, Hen, Chick; /* 定义公鸡,母鸡,鸡雏三个变量 */
Cock = 0;
while (Cock <= 19) /* 公鸡最多不可能大于19 */
{
Hen = 0;
while (Hen <= 33) /* 母鸡最多不可能大于33 */
{
Chick = 100 - Cock - Hen;
if (Cock * 15 + Hen * 9 + Chick == 300)/* 将数量放大三倍比较  这里随着倍数放大答案也会变多*/
System.out.println("\n公鸡=" + Cock + "母鸡=" + Hen + "雏鸡=" + Chick);
Hen = Hen + 1;
}
Cock = Cock + 1;

}

执行结果: 


公鸡=0母鸡=25雏鸡=75


公鸡=4母鸡=18雏鸡=78


公鸡=8母鸡=11雏鸡=81


公鸡=12母鸡=4雏鸡=84



  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值