枚举法——百钱买百鸡

来源:互联网 发布:贪吃飒淘宝店 编辑:程序博客网 时间:2024/06/07 05:05

最近,窝头的基友油条。感觉自己的智商被欺负了,很不开心
窝头就问:“油条,你这是咋的啦?”
油条:“前几天,家里的侄女问了他一个问题,没答出来,感觉智商被欺负了!!!”
窝头:“啥问题,说出来听听。”
油条:”题是这样的,现在你有一百钱,规定雄鸡一头要五钱,雌鸡一头要三钱,小鸡三头要一钱,问雄鸡多少,雌鸡多少,小鸡多少?”
窝头心想,最近学了算法,是时候在基友面前展示一下了。
窝头:“油条这事交给我”
油条大喜,“ 果然是好兄弟”
一日后,
窝头:“油条,我给你讲讲关于这个百钱有百鸡的问题”
油条:“好啊好啊”
窝头:“这个问题可以用到算法当中的枚举法来实现的,那什么是枚举法呢?”
窝头:“枚举法又称穷举法,是一种暴力算法,顾名思义就是将结构所有的可能都列举出来,逐个求解直到找到问题的解,这类问题通常一个NP-Hard问题,就是非确定性多项难解问题”
油条:“窝头,你可以啊,最近跟着咸菜进步不少啊,来来来讲讲”
窝头内心是高兴的,想当年都是别人给我将作业,咸鱼翻身的感觉真好,
窝头:“咳咳咳,那个我们可以从上面的问题中抽取出来一下关系,我们可以设定三个变量,分别是x,y,z;x代表雄鸡,y代表雌鸡,z代表小鸡,可得如下关系:”
x+y+z=100;
5x+3y+z*(1/3)=100;
x>=1&&x<20;
y>=1&&y<33;
z>=3&&z<100&&z%3==0;
窝头:”这些关系你能看都么“
油条:”可以啊,那主要是可能性太多这样一一列举会不会太麻烦“
窝头:”有了计算机这不就成了So easy的问题“
窝头:”小面我们用java代码来实现一下“
代码如下:
这里写图片描述
输出的结果就是:
x=8
y=11
z=81
x=12
y=4
z=84
窝头:”看,是不是很快啊“
油条:”天啦,窝头行啊,我要向呢学习“
窝头:”你别高兴的太早,你在好好看看这些代码,看看能不能找出更好的解决办法“
油条陷入了深深地思考,
油条:”因为三只小鸡值一钱,且z%3==0;是不是可以设成3z来表示?“
窝头:”对的,这样我们就可以将内层循环的次数由97次减少到33次同时还省去了判断z%3==0这个条件,在时间的复杂度上是一种大大的优化“
油条:”是的“
窝头:”这就是枚举法,一种很常见的处理问题的方式“
油条:”窝头,算法太神奇了,你教教我吧“
窝头:”可以啊,一起学习吧“

0 0
原创粉丝点击