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);
经过多次测试,结果大致在几百万到几千万之间,最少的一次是四百多万,最多的一次七千多万,注意这个结果是彩票的注数,可能有部分彩票的号码组合是相同的。
我记得概率上计算出的中头奖概率为两千多万分之一,就是说所有不重复的号码组合一共有两千多万种,只能说,彩票小买娱乐就好,下重注那就是赌博。
这只是一个小娱乐,计算方式未必科学,如果哪位大神发现问题或者有更好的计算方式,欢迎评论交流~