王志勇 发表于 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吗?
近期的主题:
夜晚靓歌(10):你没看过的《星雨心愿》
Feedval、Blogval将下线/谈理财和生存
2024.9感言
人生讨论(20):有人借钱怎么办?(2)
人生讨论(19):迄今为止最强的情感频道
数码评测(67):让小米/红米手机的反应提高1~2倍
数码评测(66):无线网卡FW150UH VS FW150UH
数码评测(65):如何快速自制CPU天梯图?
数码评测(64):2024年,你还在用VGA线吗?
人生讨论(18):6年就可以实现财务自由
人生讨论(17):为什么总是受欺负?
人生讨论(16):要钱的最新妙招
创业杂谈(17):什么项目能赢利?
人生讨论(15):有人借钱怎么办?
数码评测(63):高清切换超级神器
数码评测(62):再谈视频的尺寸
数码评测(61):近期数码采购和折腾
人生讨论(14):看穿尊重
数码评测(60):图拉丁-最佳中配工作“免费”手机
创业杂谈(16):博客何时终结?
版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。
与此相关的链接
自由勇专栏
Blog存档 Archives
2022年07月
2022年06月(15)
2022年05月(20)
2022年04月(16)
2022年03月(9)
2022年02月(9)
2022年01月(10)
2021年 +