问题:
111111 - 666666 里出随机数,要求
6个一样的数 1%
5个一样的数和4个四 3%
123456 5%
3个四 10%
4个一样的数除4个四 20%
1个四或2个四 30%
其它的 31% 控制随机数
5个一样的数和4个四 3%
123456 5%
3个四 10%
4个一样的数除4个四 20%
1个四或2个四 30%
其它的 31% 控制随机数
思路: 先产生随意一个概率数,在随机产生这个概率数对应的数据
1.对概率数编号如下:
1
|
2
|
3
|
4
|
5
|
6
|
7
|
1%
|
3%
|
5%
|
10%
|
20%
|
30%
|
31%
|
2.创建一个100元素的数组如下:
var snarray=[
1,2,2,2,3, 3,3,3,3,4,
4,4,4,4,4, 4,4,4,4,5,
5,5,5,5,5, 5,5,5,5,5,
5,5,5,5,5, 5,5,5,5,6,
6,6,6,6,6, 6,6,6,6,6,
6,6,6,6,6, 6,6,6,6,6,
6,6,6,6,6, 6,6,6,6,7,
7,7,7,7,7, 7,7,7,7,7,
7,7,7,7,7, 7,7,7,7,7,
7,7,7,7,7, 7,7,7,7,7,
];
随机 0-99,结果为 n,这样,可以确保 编号出现的概率分别为 1% 3% 5% 10% 20% 30% 31%
那么得到编号为: var sn=snarray[n];
建立字典:
key (int)
|
value (int[])
|
1
|
对应的数据有 111111 222222 333333 444444 555555 666666
|
2
|
对应的数据有 5个相同的数且另一个不是这几个相同的数 or 4个4且其他两个数不是4
|
3
|
123456
|
4
|
3个4且其他数据不是4
|
5
|
4个一样的数且单个数字不是4
|
6
|
1个4或者2个4的数字
|
7
|
其他的数据!
|
得到的
编号 sn 肯定是 1-7,然后在字典里取得Value
在value中取任意一个数据,即可
注:字典里value需要针对每一项设计产生规则数据的算法!