前些日子有个哥们结婚,中途撒了些红包,分享了小两口的幸福。我偶得一张红包CP,小编不才,真的是第一次见CP,很好奇,然后引发了下面的诸多的思考,在生活中找我们可以思考的东西,这是思维的锻炼,必须要做的!
![0747b592dbcc548fff26be718da94bc9.gif](https://i-blog.csdnimg.cn/blog_migrate/fae541e8931da2d60c996c65226f99ee.gif)
本文不是教育你去买CP,仅仅是思考彩票的逻辑,然后提高下自己的思维方式。
![85d6cf0aebdc181488020d50d85ab6f5.png](https://i-blog.csdnimg.cn/blog_migrate/abedd3ab0c883ed73c506ea45fd13e72.jpeg)
红包CP是一张体彩的“超级大乐透”,百度了一下,规则很简单:
5+2,前五个数据是1-35中随机获得5个不重复的数,后两位1-12随机取两个值。就不去解释各个奖励的值了,今天就是简单的阐述一下怎么自己做一个抽奖函数,按照这个超级大乐透的模式去做。
这里需要思考几个点,这就是前几天我看了本书书上说的一句话:
什么是Excel?
Excel函数和公式的核心价值是确立数据之间的关联关系,并且使用新的数据(结果)描述出来。 ------------- 《别怕,Excel函数其实很简单Ⅱ》 编著:Excelhome
我个人对Excel的理解就是下面的这句话:
Excel就是数据和数据之间建立一个联系,进行数据处理,最后显示一个数据结果;结果也是另一个数据的参数,进一步分析处理,这就是Excel语言的嵌套。
言归正传,今天思考学习这个抽奖函数的制作,下面就是今天主要要写的5个步骤:
第一步:思考抽奖函数中的随机性
第二步:初步建立抽奖函数的逻辑性
第三步:尝试去写写这个抽奖函数
第四步:通过尝试去慢慢优化函数
第五步:效果展示及思考
下面来跟着我的脚步,慢慢来看一张彩票引发的思考~
第一步:思考抽奖函数中的随机性
抽奖,抽到是什么?就是大数据小概率事件,我们不去思考怎么能抽到奖,我只来说怎么在Excel里面的这个怎么能够实现抽奖函数的效果。
以前五个数据中的第一个数据为例:随机在1-35中间抽取一个数值
这个要用的到函数就是RANDBETWEEN函数,这个函数很简单rand函数(随机生成数据)+between(在什么和什么之间),就是在某个范围内随机生成一个数据,那么根据题意就是在1-32中间获取一个值。
![10ec97d08653d11b704f92522bedf8ee.gif](https://i-blog.csdnimg.cn/blog_migrate/7cbdfe8f20b4cdb57b71e7798d2f464c.gif)
在1-32中间随机获取一个值
=RANDBETWEEN(1,35)
函数解析:在1-35中间随机获取一个值
第二步:初步建立抽奖函数的逻辑性
这个逻辑性的建立,就是思考怎么能体现彩票规则,也就是所谓客户需求:
1.前五个随机生成1-35的数值,后两位随机生成1-12的数值
2.前五个和后两位不能重复
3.由小到大排序
4.前五个数据和后两位数据没有关联性
那么里面就需要去思考这个每个条款的对应的函数的对应:
随机值可以用randbetween函数;前五个和后五个函数无关联性,那么取值就分开取值区间;从小到大排序,那就用small函数;这里面的不能重复,需要进一步思考怎么体现。
这里想到一句话:
不想当将军的士兵不是一个好士兵!-----拿破仑
![751221016540325d6f2ca0e0b0c206be.png](https://i-blog.csdnimg.cn/blog_migrate/d46061f993bd456f95745a0a7d1514b6.jpeg)
做事情一定要思考,思考大局观,思考逻辑性,思考各种可能和各种方案,那么你就可以比别人更能接触一些东西,学到更多的知识。
第三步:尝试去写写这个抽奖函数
目前前五个值和后两位的值已经可以定下来了:
前五位=RANDBETWEEN(1,35)
后两位=RANDBETWEEN(1,12)
![656d18e58ec68fa515d585336a3e6c79.gif](https://i-blog.csdnimg.cn/blog_migrate/b44019d1b917c540777dbdcbd3788ec6.gif)
那么怎么能大小排序的函数嵌套进去呢?加载一个SMALL函数-区域/第几顺位
=SMALL($D3:$H3,COLUMN(A1))
=SMALL($I3:$J3,COLUMN(A1))
函数解析:在D3:H3的区域内,获取第一、第二..的小的值,就简单的对现有数据进行了排序
加上我们是横向拉取,需要对所选区域进行$锁定。经常会有人问,怎么能知道快速的写入这个$限制范围的符号,记住技巧:
$放在谁前面,那么拉取的时候就锁什么
![8797326159a64b36ae5c14875b37879c.gif](https://i-blog.csdnimg.cn/blog_migrate/e2e51ed573d1d8258de0349d0a6f04cf.gif)
第四步:通过尝试去慢慢优化函数
这里基本上就实现了我们初步的想法,但是发现还是有个小问题,就是这个所有的值都是随机获取的,那么在这么小的1-35的范围内,肯定会随机到一个重复值,怎么能进一步去除重复值呢?这个技巧就需要我们进一步思考:
这里我们加入一个函数RAND函数,这个函数本身就是为了获取0-1的中的任意一个数,没有限制,没有位数限制,基本上算是一个无限不重复的数据。把这个数据和现有的数据进行整合然后提取?是不是有想法了?
A:先随机获取一个数据1-35进行对应排列
![7a7ee376ec4aea13418d3e7e08f6b02e.gif](https://i-blog.csdnimg.cn/blog_migrate/7d3692bdc0993452209d8f64283e6e73.gif)
B:然后进行一个对应值获取/排序处理
![ed4be5228648b05d04a439832247c913.gif](https://i-blog.csdnimg.cn/blog_migrate/ba2d5607e0b3de4a1dcb06a91c3258d9.gif)
=INDEX($A:$A,RANK($B1,$B:$B))
=SMALL($E7:$I7,COLUMN(A1))
函数解析:
第一行=通过B1的值在B中的排序进行对应获取前面A列的值
第二行=对获取的值进行排序
这段函数有点深,但是要简单的理解和思考,就会发现很简单。rank函数获取某值在某区域的顺位(可以从小到大,也可以从大到小),然后INDEX获取对应值,最后从小到大排序结束。
第五步:效果展示及思考
效果展示,确实重复值消失了,这就是原汁原味的“超级大乐透”,想想好像可以自己猜彩票了感觉还挺好,但是初步的思考下这个获奖的概率,我的天三十忆分之一。
32*31*30*29*28*12*11= 31'8979'5840 想想还是算了~
停下步伐,思考~今天的逻辑课学到了啥?
![353bd3974686d0443dc75e3b1befa4ca.gif](https://i-blog.csdnimg.cn/blog_migrate/45d54d061a1c978f3cec78cddf23634c.gif)
结尾
今天有个朋友问我,你写对这些文章难不难?她能学吗?
我想回答说:
我本身就希望我写的文章令大众小白都能接受和学习的方式。知识是什么?知识是乏味的数据和文字信息,而我就是把想这些信息通过我的表达,图片,方式去教给你,寓教于乐。我喜欢这样的教学方式,通过简单的例子,通过我们可以简单学习的方式和图片,让你更加容易的接受知识,然后学习知识。我也在慢慢摸索大家学习的方式和技巧,也在看些书,学习写文章,思考换不同的方式来教一些知识。希望能够满足大家的求知欲。