import random
import numpy as np
results = ['A', 'B', 'C', 'D', 'E', 'F']
def simulate_purchase(num_boxes):
wish = random.choice(results)
opened_boxes = []
for _ in range(num_boxes):
opened_boxes.append(random.choice(results))
while True:
new_boxes = []
wish_count = opened_boxes.count(wish)
for _ in range(wish_count):
new_boxes.append(random.choice(results))
non_wish_boxes = [box for box in opened_boxes if box != wish]
for result in set(non_wish_boxes):
if non_wish_boxes.count(result) >= 2:
new_boxes.append(random.choice(results))
for _ in range(2):
non_wish_boxes.remove(result)
if not new_boxes:
break
opened_boxes.extend(new_boxes)
return opened_boxes
def simulate_multiple_purchases(num_simulations, num_boxes):
all_results = []
for _ in range(num_simulations):
result = simulate_purchase(num_boxes)
all_results.append(len(result))
return all_results
def calculate_median(results):
return np.median(results)
def simulate_collect_all(num_simulations, num_boxes):
success_count = 0
total_cost = 0
for _ in range(num_simulations):
result = simulate_purchase(num_boxes)
if set(result) == set(results):
success_count += 1
total_cost += num_boxes
if success_count == 0:
return float('inf')
return total_cost / success_count
num_simulations = 10000
box_counts = [2, 4, 6]
medians = []
for num_boxes in box_counts:
results = simulate_multiple_purchases(num_simulations, num_boxes)
median = calculate_median(results)
medians.append(median)
cost_per_success = []
for num_boxes in box_counts:
cost = simulate_collect_all(num_simulations, num_boxes)
cost_per_success.append(cost)
print("三种价格档位最后能拿到的盲盒数量的中位数:")
print(f"档位一(25元购买2盒):{medians[0]}")
print(f"档位二(65元购买4盒):{medians[1]}")
print(f"档位三(95元购买6盒):{medians[2]}")
print("\n集齐6种结果每种至少一个时的性价比:")
print(f"档位一(25元购买2盒):{cost_per_success[0]}")
print(f"档位二(65元购买4盒):{cost_per_success[1]}")
print(f"档位三(95元购买6盒):{cost_per_success[2]}")
best_choice = np.argmin(cost_per_success) + 1
print(f"\n集齐6种结果每种至少一个时,档位 {best_choice} 性价比最高。")