GitHub地址:https://github.com/runThor/HTLottery
实现:
// 大乐透的玩法:前区号码范围1-35,随机选取5个不重复的数;后区号码范围1-12,随机选取2个不重复的数,头奖即所有号码完全一致
// 假定当期头奖结果
NSArray *f = @[@(5), @(10), @(18), @(25), @(33)]; // 前区号码
NSArray *b = @[@(3), @(12)]; // 后区号码
int r = 0; // 一致的号码个数,r == 7时代表全中
NSMutableArray *frontResult = [[NSMutableArray alloc] init];
NSMutableArray *backResult = [[NSMutableArray alloc] init];
int count = 0; // 需要购买的彩票注数
do {
[frontResult removeAllObjects];
[backResult removeAllObjects];
// 得出前区号码
for (int i = 0; i < 5; i++) {
int a;
do {
a = 1 + arc4random()%35;
} while ([frontResult containsObject:@(a)]);
[frontResult addObject:@(a)];
}
// 得出后区号码
for (int i = 0; i < 2; i++) {
int b;
do {
b = 1 + arc4random()%12;
} while ([backResult containsObject:@(b)]);
[backResult addObject:@(b)];
}
r = 0;
for (id a in frontResult) {
if ([f containsObject:a]) {
r++;
}
}
for (id bb in backResult) {
if ([b containsObject:bb]) {
r++;
}
}
count++;
} while (r != 7);
NSLog(@"%d %@%@", count, frontResult, backResult);
经过多次测试,结果大致在几百万到几千万之间,最少的一次是四百多万,最多的一次七千多万,注意这个结果是彩票的注数,可能有部分彩票的号码组合是相同的。
我记得概率上计算出的中头奖概率为两千多万分之一,就是说所有不重复的号码组合一共有两千多万种,只能说,彩票小买娱乐就好,下重注那就是赌博。
这只是一个小娱乐,计算方式未必科学,如果哪位大神发现问题或者有更好的计算方式,欢迎评论交流~