植物大战僵尸——集齐单色金盏花的策略

举报
用户已注销 发表于 2021/11/19 04:20:02 2021/11/19
【摘要】 以前很用心的玩过一段时间植物大战僵尸,用win7玩的。 点亮了所有植物 无限生存模式也玩到了不错的成绩 智慧树养到了很高的程度,然而她一直不说有意思的话了。。。 种植物基本上都是上下对称的。 我还专门收集过单色的金盏花,但是这很难。 就是拼命买种子,然后如果颜色不对的,就把它卖掉。 首先,这样肯定要...

以前很用心的玩过一段时间植物大战僵尸,用win7玩的。

点亮了所有植物

无限生存模式也玩到了不错的成绩

智慧树养到了很高的程度,然而她一直不说有意思的话了。。。

种植物基本上都是上下对称的。

我还专门收集过单色的金盏花,但是这很难。

就是拼命买种子,然后如果颜色不对的,就把它卖掉。

首先,这样肯定要亏很多钱的,得有足够的钱,这个我有。

然后,金盏花的颜色有很多种。

点击打开链接这个链接里面有讨论,都说有11种,我不太记得了,好像差不多应该就是11左右。

如果是11种的话,要碰到需要的颜色可不容易。

最要命的是2个时间问题。

一方面,金盏花的种子不能连续的买。

在商店里面,只有3个种子在独立地卖,对于每个种子,玩家买了之后,必须等一段时间之后才能买。

我不记得是多久了,好像是几个小时,反正时间不短。

另一方面,种子浇水之后需要一定的时间才能发芽,然后才能看到颜色。

而且,金盏花还有2种方向!

然而机智的我还是凑齐了2套:

上面的全部是1种紫色花,下面的是2种白色花,都是face to face的方向。

这主要归功于,我发现植物大战僵尸是不联网的游戏。

不联网的游戏怎么获取时间呢?很明显,只能是获取系统当前时间。

于是我写了2个bat:

第一个,买种子.bat

@date 2015/1/4
@ping 127.0.0.1 -n 3
@date 2015/1/5
@ping 127.0.0.1 -n 3
@date 2015/1/6
@ping 127.0.0.1 -n 3
@date 2015/1/7
@ping 127.0.0.1 -n 3
@date 2015/1/8
@ping 127.0.0.1 -n 3
@date 2015/1/9 
@ping 127.0.0.1 -n 3
@date 2015/1/10
@ping 127.0.0.1 -n 3

第二个,修改时间.bat

:n
@date 2015/1/1 
@ping 127.0.0.1 -n 2
@date 2015/1/2
@ping 127.0.0.1 -n 2
goto :n

这2个bat的作用是不一样的,一个是买种子,一个是让种子发芽。

总之,有了这2个bat之后,就可以轻松无限买种子了,只要你有钱,简直是外挂。

对于win10,只要右键bat文件,点击“以管理员身份运行”即可,普通的双击运行是没有效果的。

在破除了时间限制的条件下,我们来讨论一下,如何集齐32朵紫色金盏花?

首先是方向问题,到底应该集单向的还是face to face的呢?

这个不应该一开始就决定,应该先不管方向,先收集一些紫色花,然后看看她们的颜色如何。

即使打定了主意要集单向的,也应该这么做,看哪个方向的比较多就继续集哪个方向的。

后来发现,两个方向的数量非常接近。

这样的话,且不说已有的基础,哪怕是从头开始集,集face to face的绝对比集单向的要容易很多。

因为两个方向的概率应该是一样的我感觉,所以集face to face的其实差不多就相当于是不管方向,只要颜色对就行。

这样,最后只需要按照颜色一排就是的了。

当然了,集face to face的肯定是比不管方向的要难一些,不过差别确实不大。

然后再考虑这样一个问题:金盏花有11种颜色,如果不管方向,如何集齐32朵紫色的?

每次买3个种子,不是紫色的就卖掉,然后进入下一轮循环。。。

每一轮都有这些操作:

(1)运行买种子.bat,同时买种子

(2)浇水

(3)运行修改时间.bat,运行结束之后种子就发芽了

(4)如果是不需要的,就直接卖掉

到了集齐31朵的时候,如果每次只买一个种子的话,这样还是比较麻烦,所以,我们需要借助水生植物园。

事实上,当集齐30朵的时候,我们就需要借助水生植物园了。

这样,就可以每一轮都买3个种子了。

最后考虑,大约需要多少轮(每轮购买3个种子)才能集齐32朵紫色的?

这是一个动态规划问题,类似于找bug问题:​概率与期望 POJ 2096 Collecting Bugs​

这个问题抽象出来就是:

f[0]=0,f[1]=0,f[2]=0

f[n]=(f[n-1]*300+f[n-2]*30+f[n-3]+1331)/331.0

而f[34]就是答案,这样就很简单了。

代码:


  
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. double f[35];
  6. f[0] = 0, f[1] = 0, f[2] = 0;
  7. for (int n = 3; n <= 34; n++)
  8. f[n] = (f[n - 1] * 300 + f[n - 2] * 30 + f[n - 3] + 1331) / 331;
  9. cout << f[34];
  10. return 0;
  11. }


 

答案是117.667,约为118,也就是说大约要118轮才能集齐32朵紫色的。

不要误会,我打断点看了更精确的结果,答案并不是353/3.0

文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/nameofcsdn/article/details/52835228

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。