题解 | #统计每个月兔子的总数#
统计每个月兔子的总数
http://www.nowcoder.com/practice/1221ec77125d4370833fd3ad5ba72395
解题思路:
方法一: 斐波那契递归。
代码:
use std::io::{self, *};
fn fabonacii(n:u32) -> u32 {
if n == 1 || n == 2 { return 1;}
fabonacii(n-1) + fabonacii(n-2)
}
fn main() {
let stdin = io::stdin();
for line in stdin.lock().lines() {
let n = line.unwrap().trim().parse::<u32>().unwrap_or(0);
println!("{}",fabonacii(n));
}
}
方法二:数组存储递归数据。
可以减少调栈,但是得多耗费一点空间。
代码:
use std::io::{self, *};
fn main() {
let stdin = io::stdin();
let mut v = vec![1;31];
for i in 2..31 {
v[i] = v[i-1] + v[i-2];
}
for line in stdin.lock().lines() {
let n = line.unwrap().trim().parse::<usize>().unwrap_or(0);
println!("{}",v[n-1]);
}
}
方法三:打表(老实憨厚)
代码:
use std::io::{self, *};
fn main() {
let stdin = io::stdin();
for line in stdin.lock().lines() {
let n = line.unwrap().trim().parse::<u32>().unwrap_or(0);
println!("{}",match n {
1|2 => 1,
3 =>2,
4 =>3,
5 =>5,
6 =>8,
7 =>13,
8 =>21,
9 =>34,
10 =>55,
11 =>89,
12 =>144,
13 =>233,
14 =>377,
15 =>610,
16 =>987,
17 =>1597,
18 =>2584,
19 =>4181,
20 =>6765,
21 =>10946,
22 =>17711,
23 =>28657,
24 =>46368,
25 =>75025,
26 =>121393,
27 =>196418,
28 =>317811,
29 =>514229,
30 =>832040,
31 =>1346269,
_ =>0,
});
}
}
用 Rust 刷华为机试HJ 文章被收录于专栏
用 Rust 刷 HJ100 题,只需要懂基础 Rust 语法就能看懂