王志勇 发表于 2019年01月24日 12:27
我的这个算法的原理,就是先让程序自动列举出所有符合条件的10个数相加为100(不考虑排列顺序为66种),这时候时候可以不考虑10个数的排列顺序,消耗的服务器资源,循环次数大约仅为101*101。(其实不需要考虑循环多少次)
最后的2步,先随机拿出一个符合条件的10个数的组合。再将拿到的组合,再随机排列。这样,就完美解决“随机”数的需求。(特别是经过这2步的2次随机处理,产生随机数的种类的数量有几千种。)
如果数字可重复,程序反而复杂一些,但也能实现。
由于只循环了约101*101次,所以对服务器资源的消耗很小,消耗的时间约为0.01秒以内。这样的程序,适合于不太高频访问的程序。
对于高频访问的程序,可以事先建立一个后台页面,让其提前自动列举出、并将这66种组合存储在数据库。
下次在这个页面被访问的时候,直接从66种组合中随机拿出一组,再将10个数随机排列,这样,使用时完全没有了循环程序,程序效率提高了很多。
这两天发现,如果一旦开始写这个程序,在提前筛选这66组数时,很可能循环的次数不是101*101。比如我们先假设从1-6取3个数,要求在不考虑顺序的情况下,数字不重复,得到的结果是:
1 2 3
1 2 4
1 2 5
1 2 6
1 3 4
1 3 5
1 3 6
1 4 5
1 4 6
1 5 6
2 3 4
2 3 5
2 3 6
3 4 5
3 4 6
4 5 6
推算的结果为,假设从1-6取3个数,要求在不考虑顺序的情况下,数字不重复,共有16种。这种题,就常出现在现在的小学数学一、二年级。
如果换成从1-7取4个数,或者从1-8取3个数,对比一下结果,就能推算出一个公式,根据这个公式就能写出0-100取10个数(或任意个数)的所有组合的程序。由于时间的关系,就不推导了。
0-100,随机取10个数的和为100的算法看似很简单,其实有一定的计算量和难度。
自由勇 2019-01-24 13:29
谢谢关注,这个问题我知道的,原因写在了这里:http://www.auiou.com/relevant/00000023.jsp
历时13年,现在终于恢复到了当时的连续计数。此篇博客的ID是23,当到达29的时候,就会恢复连续计数。
恢复之后,会有大片的时间断链。比如翻页时,有时会出现前面的文章还是2019年,后面的文章都是2007、2006年。因为设计这个Blog的程序时,翻页是以数字的连续值来获取ID的。由于时间的关系,现在也没有时间去做一个连续时间的ID列表,当新文章多了,这个问题会被慢慢淡化。
置顶的文章:
论朋友圈可以发什么?
短信验证开发的方案分享
巡回更新:2018-09-21
速度是永恒的主题
UTF-8、HTTPS原来都是浮云
https安全吗?
独立博客有必要安装https吗?
近期的主题:
错过的最遗憾的项目
微信7.0.3安装试用
麻烦大了,今天又遇到了灾难性的麻烦!
Win10系统的2个bug
新网的域名注册-实名-信息模板管理的bug的解决方法:提示“请填写3-4位数字”
委屈和脾气
Eonval项目的开发进度和最难以解决的部分(2)
select标签的一个bug:某些浏览器下显示为灰色
30岁和40岁最大的区别
安卓手机root已知的作用罗列
Eonval的logo设计历程和含义(附截图)
劳累中的开发(附截图)
版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。
与此相关的链接
自由勇专栏
Blog存档 Archives
2019年02月
2019年01月(30)
2018年12月(30)
2018年11月(30)
2018年10月(30)
2018年09月(17)
2016年-2017年(9)
2014年06月-09月(10)
2013年 +