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);
經過多次測試,結果大致在幾百萬到幾千萬之間,最少的一次是四百多萬,最多的一次七千多萬,注意這個結果是彩票的注數,可能有部分彩票的號碼組合是相同的。
我記得概率上計算出的中頭獎概率爲兩千多萬分之一,就是說所有不重複的號碼組合一共有兩千多萬種,只能說,彩票小買娛樂就好,下重注那就是賭博。
這只是一個小娛樂,計算方式未必科學,如果哪位大神發現問題或者有更好的計算方式,歡迎評論交流~