龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

今天上班发现一个ThoughtWorks的面试题,分享一下

时间:2014-07-22 14:48来源: 作者: 点击:
分享到:
可以接受任意多个特殊数(不包含0),在任意数字范围内输出(1~xxx)其实还可以用策略模式吧算法独立出来 针对这个题目就先不写了 (偷懒~~)
可以接受任意多个特殊数(不包含0),在任意数字范围内输出(1~xxx)
其实还可以用策略模式吧算法独立出来  针对这个题目就先不写了 (偷懒~~)
<?php
class FizzBuzzWhizz{
  private $_special=array();
  private $_words=array();
  public function __construct(array $special,array $words){
    if(in_array(0,$special)){
      exit('特殊数中不能含有0');
    }
    $this->_special=$special;
    $this->_words=$words;
  }
  public function run($num){
    $output='';
    for($i=1;$i<=$num;$i++){
      $output.=$this->_calculate($i);
    }
    echo $output;
    exit();
  }
  private function _calculate($number){
    $str='';
    if(strpos($number,$this->_special[0]) > 0){
      return $this->_words[0]."<br>";
    }
    foreach($this->_special as $k=>$v){
      if($number%$v === 0){
        $str.=$this->_words[$k];
      }
    }
    return $str==''?$number.'<br>': $str.'<br>';
  }
}

$special=array(3,5,7);
$words=array('Fizz','Buzz','Whizz');
$obj=new FizzBuzzWhizz($special,$words);
$obj->run(100);
精彩图集

赞助商链接