1、福彩、体彩玩法
2、程序输出结果
===== 福彩双色球 ======
后五个组合: ["28293031323312", "28293031323313", "28293031323314", "28293031323315", "28293031323316"]
前五个组合: ["01020304050601", "01020304050602", "01020304050603", "01020304050604", "01020304050605"]
组合总数量: 17721088===== 福彩快乐8 ======
后五个组合: ["7576777880", "7576777980", "7576787980", "7577787980", "7677787980"]
前五个组合: ["0102030405", "0102030406", "0102030407", "0102030408", "0102030409"]
生成的样本数量: 24040016
提示: 选择10个号码时的组合数约为: 1.6069380442589903e+12(无法在普通计算机上生成所有样本)===== 福彩3D ======
后五个组合: ["995", "996", "997", "998", "999"]
前五个组合: ["000", "001", "002", "003", "004"]
组合总数量: 1000===== 福彩七乐彩 ======
后五个组合: ["23242526282930", "23242527282930", "23242627282930", "23252627282930", "24252627282930"]
前五个组合: ["01020304050607", "01020304050608", "01020304050609", "01020304050610", "01020304050611"]
组合总数量: 2035800===== 体彩大乐透 ======
后五个组合: ["31323334350911", "31323334350912", "31323334351011", "31323334351012", "31323334351112"]
前五个组合: ["01020304050102", "01020304050103", "01020304050104", "01020304050105", "01020304050106"]
组合总数量: 21425712===== 体彩七星彩 ======
后五个组合: ["0009995", "0009996", "0009997", "0009998", "0009999"]
前五个组合: ["0000000", "0000001", "0000002", "0000003", "0000004"]
生成的样本数量: 10000
理论上的总组合数: 10,000,000(可生成所有样本,但需要足够内存)===== 体彩排列三 ======
后五个组合: ["995", "996", "997", "998", "999"]
前五个组合: ["000", "001", "002", "003", "004"]
组合总数量: 1000===== 体彩排列五 ======
后五个组合: ["99995", "99996", "99997", "99998", "99999"]
前五个组合: ["00000", "00001", "00002", "00003", "00004"]
组合总数量: 100000===== 体彩3D ======
后五个组合: ["995", "996", "997", "998", "999"]
前五个组合: ["000", "001", "002", "003", "004"]
组合总数量: 1000===== 体彩22选5 ======
后五个组合: ["1718192022", "1718192122", "1718202122", "1719202122", "1819202122"]
前五个组合: ["0102030405", "0102030406", "0102030407", "0102030408", "0102030409"]
组合总数量: 26334
3、完整代码
use std::fmt::Write;
fn combination_count(n: u8, k: u8) -> usize {if k > n || k == 0 {return 0;}let k = k.min(n - k); let mut result = 1; for i in 1..=k {result = result * (n - k + i) as usize / i as usize; }result
}
fn create_unique_combinations(a: u8, b: u8) -> Vec<String> {let count = combination_count(a, b);let mut result = Vec::with_capacity(count);let mut indices: Vec<u8> = (0..b).collect();while let Some(_last_idx) = indices.last().copied() {let mut s = String::with_capacity(b as usize * 2);for &idx in &indices {let num = idx + 1; if num < 10 {write!(s, "0{}", num).unwrap(); } else {write!(s, "{}", num).unwrap(); }}result.push(s);let mut i = b as isize - 1; while i >= 0 && indices[i as usize] == a - b + i as u8 {i -= 1; }if i < 0 {break;}indices[i as usize] += 1;for j in (i + 1) as usize..b as usize {indices[j] = indices[j - 1] + 1;}}result
}
fn create_permutations_with_repetition(digits: u8, length: u8, max_results: Option<usize>) -> Vec<String> {let max_possible_count = match length {1 => digits as usize, 2 => (digits as usize).saturating_mul(digits as usize), 3 => (digits as usize).saturating_mul(digits as usize).saturating_mul(digits as usize), 5 => {let base = digits as usize;base.saturating_mul(base).saturating_mul(base).saturating_mul(base).saturating_mul(base)},7 => {100000 },_ => {let base = digits as usize;let mut count: usize = 1; for _ in 0..length {count = count.saturating_mul(base);}if count < 100_000_000 {count} else {100_000 }}};let count = match max_results {Some(limit) => max_possible_count.min(limit), None => max_possible_count };let mut result = Vec::with_capacity(count);let str_capacity = length as usize;for i in 0..count {let mut s = String::with_capacity(str_capacity);let mut num = i; for _ in 0..length {let digit = num % digits as usize; write!(s, "{}", digit).unwrap(); num /= digits as usize; }s = s.chars().rev().collect();result.push(s);}result
}
fn create_combined_list(a: u8, b: u8, c: u8, d: u8) -> Vec<String> {let group1 = create_unique_combinations(a, b); let group2 = create_unique_combinations(c, d); let result_count = group1.len() * group2.len();let mut result = Vec::with_capacity(result_count);let s1_len = group1.first().map_or(0, |s| s.len());let s2_len = group2.first().map_or(0, |s| s.len());for s1 in &group1 {for s2 in &group2 {let mut combined = String::with_capacity(s1_len + s2_len);combined.push_str(s1); combined.push_str(s2); result.push(combined); }}result
}
fn show_double_color_ball_result() {println!("===== 福彩双色球 ======");let combined_result = create_combined_list(33, 6, 16, 1);println!("后五个组合: {:?}", &combined_result[combined_result.len().saturating_sub(5)..]);println!("前五个组合: {:?}", &combined_result[0..5.min(combined_result.len())]);println!("组合总数量: {}", combined_result.len());
}
fn show_happy_eighty_result() {println!("===== 福彩快乐8 ======");let results = create_unique_combinations(80, 5);println!("后五个组合: {:?}", &results[results.len().saturating_sub(5)..]);println!("前五个组合: {:?}", &results[0..5.min(results.len())]);println!("生成的样本数量: {}", results.len());println!("提示: 选择10个号码时的组合数约为: 1.6069380442589903e+12(无法在普通计算机上生成所有样本)");
}
fn show_welfare_3d_result() {println!("===== 福彩3D ======");let results = create_permutations_with_repetition(10, 3, None);println!("后五个组合: {:?}", &results[results.len().saturating_sub(5)..]);println!("前五个组合: {:?}", &results[0..5.min(results.len())]);println!("组合总数量: {}", results.len());
}
fn show_welfare_seven_happiness_result() {println!("===== 福彩七乐彩 ======");let results = create_unique_combinations(30, 7);println!("后五个组合: {:?}", &results[results.len().saturating_sub(5)..]);println!("前五个组合: {:?}", &results[0..5.min(results.len())]);println!("组合总数量: {}", results.len());
}
fn show_lotto_result() {println!("===== 体彩大乐透 ======");let combined_result = create_combined_list(35, 5, 12, 2);println!("后五个组合: {:?}", &combined_result[combined_result.len().saturating_sub(5)..]);println!("前五个组合: {:?}", &combined_result[0..5.min(combined_result.len())]);println!("组合总数量: {}", combined_result.len());
}
fn show_seven_star_result() {println!("===== 体彩七星彩 ======");let results = create_permutations_with_repetition(10, 7, Some(10000));println!("后五个组合: {:?}", &results[results.len().saturating_sub(5)..]);println!("前五个组合: {:?}", &results[0..5.min(results.len())]);println!("生成的样本数量: {}", results.len());println!("理论上的总组合数: 10,000,000(可生成所有样本,但需要足够内存)");
}
fn show_permutation_three_result() {println!("===== 体彩排列三 ======");let results = create_permutations_with_repetition(10, 3, None);println!("后五个组合: {:?}", &results[results.len().saturating_sub(5)..]);println!("前五个组合: {:?}", &results[0..5.min(results.len())]);println!("组合总数量: {}", results.len());
}
fn show_permutation_five_result() {println!("===== 体彩排列五 ======");let results = create_permutations_with_repetition(10, 5, None);println!("后五个组合: {:?}", &results[results.len().saturating_sub(5)..]);println!("前五个组合: {:?}", &results[0..5.min(results.len())]);println!("组合总数量: {}", results.len());
}
fn show_sports_3d_result() {println!("===== 体彩3D ======");let results = create_permutations_with_repetition(10, 3, None);println!("后五个组合: {:?}", &results[results.len().saturating_sub(5)..]);println!("前五个组合: {:?}", &results[0..5.min(results.len())]);println!("组合总数量: {}", results.len());
}
fn show_sports_22_choose_5_result() {println!("===== 体彩22选5 ======");let results = create_unique_combinations(22, 5);println!("后五个组合: {:?}", &results[results.len().saturating_sub(5)..]);println!("前五个组合: {:?}", &results[0..5.min(results.len())]);println!("组合总数量: {}", results.len());
}
fn main(){show_double_color_ball_result(); println!(); show_happy_eighty_result(); println!();show_welfare_3d_result(); println!();show_welfare_seven_happiness_result(); println!();show_lotto_result(); println!();show_seven_star_result(); println!();show_permutation_three_result(); println!();show_permutation_five_result(); println!();show_sports_3d_result(); println!();show_sports_22_choose_5_result();
}