fizzbuzz.md 1.9 KB
Newer Older
jackymao.com's avatar
jackymao.com 已提交
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
# fizzbuzz

现在你了解了 Rust 的基础,先试着自己写一个 fizzbuzz 程序,规则如下:

从 1 打印到 100, 当数字能被 3 整除时,打印 fizz, 能被 5 整除时,打印 buzz, 能被 15 整除时,打印 fizzbuzz, 否则,直接打印数字。

先自己写完再来对照下面的写法并答题。

以下打印 fizzbuzz 的程序,不能正确输出结果的是:

## 答案

```rust
fn main() {
    (1 ..= 100)
        .map(|i| {
            if i % 15 == 0 {
                println!("fizzbuzz");
            } else if i % 3 == 0  {
                println!("fizz");
            } else if i % 5 == 0 {
                println!("buzz");
            } else {
                println!("{}", i);
            }
        });        
}
```

### map 是惰性求值,不能直接输出,使用 for_each 可正确运行

```rust
fn main() {
    (1 ..= 100)
        .for_each(|i| {
            if i % 15 == 0 {
                println!("fizzbuzz");
            } else if i % 3 == 0  {
                println!("fizz");
            } else if i % 5 == 0 {
                println!("buzz");
            } else {
                println!("{}", i);
            }
        });        
}
```

### 使用 for 循环和 if else 条件判断

```rust

fn main() {
    for i in 1..=100 {
        if i % 15 == 0 {
            println!("fizzbuzz");
        } else if i % 3 == 0  {
            println!("fizz");
        } else if i % 5 == 0 {
            println!("buzz");
        } else {
            println!("{}", i);
        }
    }       
}

```

### 使用 for 循环和 match 匹配  

```rust
fn main() {
    for i in 1..=100 {
        match (i % 3 == 0, i % 5 == 0) {
            (true, true) => println!("fizzbuzz"),
            (true, false) => println!("fizz"),
            (false, true) => println!("buzz"),
            (false, false) => println!("{}", i),
        }
    }       
}
```