|
本帖最后由 拼音佳佳 于 2019-9-22 17:40 编辑
餐厅来了客人,给出一个消费额度,然后自动从菜品库中选取指定数量的菜品,生成菜单.求思路...
我想到一个方法:
1.从各菜品库中随机选择一道菜,凑成菜单
2.对比餐标,超了,就把最贵的菜随机替换掉.再比菜谱,如果低了,就把最低的菜替换掉.如此循环1000次以内,并且逼近到一个很接近的价格...
以此来降低我们的工作量,让客人满意,嗯嗯,你肯定懂...
看看各位的建议,有更好的思路吗?
有个比较好的思路:
1.把菜的价格先列出来,比如热菜有14个价位,按这个方法,排出2个凉菜10个热菜1汤1主食
2.按价位取各自的随机数再求和.
3.根据餐标,逐渐缩小随机范围,把菜价往高拉,使得生成的价位与目标更为接近.
4.精细操作,让菜单与价位完全相等.
补充:之前的思路要推翻.菜品14道,解方程的思路就是循环嵌套,但是这么套会出问题,循环次数太多,程序假死.
所以换一个玩法:先产生随机数生成8个热菜和其他,留2到3个,
比如目标是900元,热菜最低28元最贵88元,那么,先产生随机数使得菜单总价与目标差值在56与176之间,这个过程相当快.然后再做两个循环来求解,运算次数=13*13,几百次而已.3循环2000多次也可以接受,但是穷举法14次嵌套就是个天文数字了.
算法再补充:
1.随机的给各菜品选择价位.
2.对比目标值,如果小了,就从第一道菜开始,在初始随机值的基础上,提高一个档位.如果还小,选择下一道菜,继续提高一档,循环(已达最高档的跳过)
3.如果价位超标,最后一次进档的退一步,再选下一道菜做进档尝试,对上数了,就结束程序.
4.循环一遍之后仍然对不上的,结束程序,进行手工处理(差不了几块钱了)
|
|