2007-03-18

我的FizzBuzz

很简单的一个题: 如果1到100之间的一个数是3的倍数, 打印Fizz; 是5的倍数, 打印Buzz; 是3和5的倍数, 打印FizzBuzz, 其余情况打印这个数本身。

我的第一份答案(python, 在至少失败了3次后得出来的):

for i in range(1,101):
if i % 3 == 0:
if i % 5 == 0: print "FizzBuzz"
else: print "Fizz"
elif i % 5 == 0: print "Buzz"
else: print i
第二份答案:
for i in range(1,101):
if i % 3 == 0: print "Fizz"
elif i % 5 == 0: print "Buzz"
elif i % 15 == 0: print "FizzBuzz"
else: print i
别人的答案1:
print map(lambda x: 'FizzBuzz' if x%15 == 0 else 'Fizz' if x%3 == 0 else 'Buzz' if x%5 == 0 else x, range(100))
别人的答案2:
for i in range(1, 100) :
fmt = [i, "fizz", "buzz", "fizz buzz"]
print fmt[(i % 3 == 0) + 2 * (i % 5 == 0)]
别人的答案3(recursive):
def fizzbuzz(n):
if n:
if n % 15 == 0: return fizzbuzz(n-1) + 'fizzbuzz ';
elif n % 5 == 0: return fizzbuzz(n-1) + 'buzz ';
elif n % 3 == 0: return fizzbuzz(n-1) + 'fizz ';
else : return fizzbuzz(n-1) + ('%d ' % n)
return ''

>>> fizzbuzz(100)

别人的答案4:
a = []
for i in range(1,101):
a.append((i%15==0) and "FizzBuzz" or ((i%5==0) and "Buzz" or ((i%3==0) and "Fizz" or str(i))))
print a
别人的答案——其他

好了,我是个白痴。

1 comment:

Joel said...

不好意思,blogger把行前的空格都吃掉了……