-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathguess-number-higher-or-lower.rs
47 lines (42 loc) · 1.14 KB
/
guess-number-higher-or-lower.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#![allow(dead_code, unused, unused_variables, non_snake_case)]
struct Solution;
impl Solution {
/// 二分查找
unsafe fn guessNumber(n: i32) -> i32 {
let mut start = n;
let mut num = 0;
loop {
// std::thread::sleep(std::time::Duration::from_secs(1));
let guess_num = start - (start - num) / 2;
let s = guess(guess_num);
println!("{}", guess_num);
if s == -1 {
// 我猜的较大时
start = guess_num;
} else if s == 1 {
// 我猜的较小时
num = guess_num;
} else {
break guess_num;
}
}
}
}
// static SELECT: i32 = 1702766719;
// static SELECT: i32 = 6;
static SELECT: i32 = 2147483647;
fn main() {
// let x = unsafe { Solution::guessNumber(2126753390) };
// let x = unsafe { Solution::guessNumber(10) };
let x = unsafe { Solution::guessNumber(2147483647) };
assert_eq!(x, SELECT);
}
unsafe fn guess(num: i32) -> i32 {
if SELECT > num {
1
} else if SELECT < num {
-1
} else {
0
}
}