diff --git a/837_new_21_game/Cargo.lock b/837_new_21_game/Cargo.lock new file mode 100644 index 0000000..f08e14f --- /dev/null +++ b/837_new_21_game/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "new_21_game" +version = "0.1.0" diff --git a/837_new_21_game/Cargo.toml b/837_new_21_game/Cargo.toml new file mode 100644 index 0000000..9e6a7b0 --- /dev/null +++ b/837_new_21_game/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "new_21_game" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/837_new_21_game/src/main.rs b/837_new_21_game/src/main.rs new file mode 100644 index 0000000..3380584 --- /dev/null +++ b/837_new_21_game/src/main.rs @@ -0,0 +1,35 @@ +fn main() { + println!("Hello, world!"); +} + +struct Solution; + +impl Solution { + pub fn new21_game(n: i32, k: i32, max_pts: i32) -> f64 { + if k == 0 || n >= k + max_pts { + return 1f64; + } + + let mut result = 0f64; + let mut table = vec![0f64; (n + 1) as usize]; + table[0] = 1f64; + let mut sum = 1f64; + + for i in 1..(n + 1) { + let prob = sum / max_pts as f64; + table[i as usize] = prob; + + if i < k { + sum += prob; + } else { + result += prob; + } + + if i >= max_pts { + sum -= table[(i - max_pts) as usize]; + } + } + + result + } +}