王志勇 发表于 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列表,当新文章多了,这个问题会被慢慢淡化。
置顶的文章:
股骨头坏死的中早期修复方法
Windows流畅度300%以上体感的操作
超低价享受i7-7700的体验
https速度测试(可下载精确测试工具)
家用电脑理性优化升级天梯图之2026
服务器版Linux系统的选择之2026
秒会+实战PHP程序设计培训(2)
如何快速自制CPU天梯图?
我不明白你明不明白我明白(明白不)
近期的主题:
本机安装PHP 8
健康维护(2):股骨头坏死有多接近?
北京之行2026
健康维护(1):为什么晚上睡觉时会肚子疼?
https利弊(5):技术上的定向安全与垄断本质
博客正在加紧调整中
十分感谢博友点评:自由勇 二十年博客的老程序员
DIY(35-3):6路×2 USB全自动电脑切换器
这次突然特别理解老罗
支架设计(1):船型开关固定
DIY(35-2):6路×2 USB全自动电脑切换器
今天起名未成功
DIY(37):我是如何坚持完成这些DIY作品的?
DIY(36):支架、外壳如何快速1:1精确定模?
DIY(35):6路×2 USB全自动电脑切换器
夜晚靓歌(14):封神级《演员》
真玄学心得(25):生存禁忌红线
https利弊(4):商业(大型)逻辑
流畅的系统和火狐浏览器
https利弊(3):https延迟和生态
版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。
与此相关的链接
自由勇专栏
Blog存档 Archives
2025年-2026年03月(10)
2024年(13)
2023年 +