FizzBuzz

最近学习Rust的时候,看到循环控制官方案例说的是FizzBuzz问题,只给了一个wiki的链接。搜了一下,问题如下:

写一个程序打印1到100这些数字。3的倍数打印“Fizz”替代数字,5的倍数用“Buzz”代替,既是3的倍数又是5的倍数打印“FizzBuzz”。

同时找到了一个python的精简写法,巧妙的用了字符串的截取与拼接以及“or”的短路逻辑运算:

for x in range(1, 101): print("Fizz"[x % 3 * 4::] + "Buzz"[x % 5 * 4::] or x)

C语言用三目运算符写了一个,执行一次只需要两次布尔运算:

#include<stdio.h>

void main() {
    for(int i = 1; i < 101; i++) i % 3 ? (i % 5 ? printf("%d\n", i) : printf("Buzz\n")) : printf("%s\n", (i % 5 ? "Fizz" : "FizzBuzz"));
}

C语言根据上述Python的思路写了另一个:

#include<stdio.h>

void main() {
    for(int i = 1; i < 101; i++) printf("%s%s", (i % 3 ? "" : "Fizz"), (i % 5 ? "" : "Buzz")) || printf("%d", i) , printf("\n");
}

基于第一个C语言版本的思路来一个Rust的:

fn main() {
    for i in 1..101 {
        println!("{}", if i % 3 == 0 { if i % 5 == 0 { "FizzBuzz".to_string() } else { "Fizz".to_string() } } else { if i % 5 == 0 { "Buzz".to_string() } else { format!("{}", i) } });
    }
}
知识共享许可协议
本作品由游由采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。

发表评论

电子邮件地址不会被公开。 必填项已用*标注