【发布时间】:2016-01-16 21:35:03
【问题描述】:
我相信你们中的大多数人应该熟悉 FizzBuzz 是什么。
对于那些不知道我在这里说什么的人。 FizzBuzz 是这样的:
编写一个打印从 1 到 100 的数字的程序。但是对于三的倍数打印“Fizz”而不是数字,对于五的倍数打印“Buzz”。对于同时是 3 和 5 的倍数的数字,打印“FizzBuzz”。
对你们大多数人来说,这可能很容易创建。
虽然在网上浏览后,我发现一些帖子要求他们不使用模数运算符。
我发现这段 python 代码很有趣:
m = [None, "Fizz", "Buzz", "FizzBuzz"]
v = 0x30490610
for i in range(1, 101):
j = v & 3
print(m[j] if j else i)
v = v >> 2 | j << 28
结果:
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
FizzBuzz
46
47
Fizz
49
Buzz
Fizz
52
53
Fizz
Buzz
56
Fizz
58
59
FizzBuzz
61
62
Fizz
64
Buzz
Fizz
67
68
Fizz
Buzz
71
Fizz
73
74
FizzBuzz
76
77
Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz
我的问题是它是如何做到的?
我了解“v”变量包含一个十六进制值。
这是如何实现创建 FizzBuzz 的?你会如何向一个完全的初学者解释这个?
【问题讨论】: