• thoughtworks编程题


    微博看到vczh分享的thoughtworks的一道题目https://www.jinshuju.net/f/EGQL3D,代码写完之后才得知这个公司并不是我想的那样美好。

    题目:

    FizzBuzzWhizz

    你是一名体育老师,在某次课距离下课还有五分钟时,你决定搞一个游戏。此时有100名学生在上课。游戏的规则是:


    1. 你首先说出三个不同的特殊数,要求必须是个位数,比如3、5、7。
    2. 让所有学生拍成一队,然后按顺序报数。
    3. 学生报数时,如果所报数字是第一个特殊数(3)的倍数,那么不能说该数字,而要说Fizz;如果所报数字是第二个特殊数(5)的倍数,那么要说Buzz;如果所报数字是第三个特殊数(7)的倍数,那么要说Whizz。
    4. 学生报数时,如果所报数字同时是两个特殊数的倍数情况下,也要特殊处理,比如第一个特殊数和第二个特殊数的倍数,那么不能说该数字,而是要说FizzBuzz, 以此类推。如果同时是三个特殊数的倍数,那么要说FizzBuzzWhizz。
    5. 学生报数时,如果所报数字包含了第一个特殊数,那么也不能说该数字,而是要说相应的单词,比如本例中第一个特殊数是3,那么要报13的同学应该说Fizz。如果数字中包含了第一个特殊数,那么忽略规则3和规则4,比如要报35的同学只报Fizz,不报BuzzWhizz。
     
    现在,我们需要你完成一个程序来模拟这个游戏,它首先接受3个特殊数,然后输出100名学生应该报数的数或单词。比如,
     
    输入
    3,5,7
    输出(片段)

    1
    2
    Fizz
    4
    Buzz
    Fizz
    Whizz
    8
    Fizz
    Buzz
    11
    Fizz
    Fizz
    Whizz
    FizzBuzz
    16
    17
    Fizz
    19
    Buzz 
    一直到100
     
    我用scheme实现的,scheme只学了些皮毛,当然在语法方面这个语言好像简单到几分钟就能学会;另外这道题感觉并不能展现scheme的强大。但之所以贴出来是因为最后的代码在可扩展、易读、长度等方面做了一些妥协动了一些脑筋:
    (define (x-involve-n x n)
    (let ((shift-x (truncate (/ x 10))))
    (cond ((= shift-x (/ (- x n) 10)) #t)
    ((= shift-x 0) #f)
    (else (x-involve-n shift-x n)))))
    
    (define (proc-x l1 l2)
    (lambda (x)
    (define (next la lb ret)
    (cond ((null? la) (if ret '() (list x)))
    ((integer? (/ x (car la))) (cons (car lb) (next (cdr la) (cdr lb) #t)))
    (else (next (cdr la) (cdr lb) ret))))
    (if (x-involve-n x (car l1)) (list (car l2)) (next l1 l2 #f))))
    
    (define (game l1)
    (let ((l2 '("Fizz" "Buzz" "Whizz")))
    (define (count-off n)
    (define (show x)
    (newline)
    (map display ((proc-x l1 l2) x))
    (count-off (+ x 1)))
    (if (< n 101) (show n) (newline)))
    (count-off 1)))
    

      

  • 相关阅读:
    【报错】ES报错找不到Gson类
    【报错】Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
    【JUC】AtomicInteger源码
    【Netty】Netty服务启动源码
    【Netty】Netty实现简单RPC
    【Netty】心跳机制
    【Netty】Netty模型
    【Netty】Reactor模型
    C# 好狂的多线程呀
    select使用
  • 原文地址:https://www.cnblogs.com/fengbruce/p/3705480.html
Copyright © 2020-2023  润新知