之前有一家公司出的考題 , 用一個迴圈寫出下列結果
* ** *** **** ***** ****** ***** **** *** ** *
我原本是這麼寫的
for($i=1; $i<12; $i++) { $n = ($i<6) ? $i:(12-$i); echo str_repeat('*' , $n) . "\n"; }
當初這麼個寫法雖然可以跑 , 但沒有仔細考慮到效能問題 , 後來想到應該這麼寫可以更好
for($i=-5 ; $i<6 ; $i++ ) { echo str_repeat('*' , 6 - abs($i)) . "\n"; }
當然還有個作弊的方式可以寫出效能更好的 , 就是直接查表法 ...
我自己寫了個效能測試來看看每一種的速度 , 程式碼如下
<?php function test1() { $s = ''; for($i=1; $i<12; $i++) { $n = ($i<6) ? $i:(12-$i); $s .= str_repeat('*' , $n) . "\n"; } return $s; } function test2() { $s = ''; for($i=-5 ; $i<6 ; $i++ ) { $s .= str_repeat('*' , 6 - abs($i)) . "\n"; } return $s; } function test3() { static $a = array( "*\n" , "**\n" , "***\n" , "****\n" , "*****\n" , "******\n" , "*****\n" , "****\n" , "***\n" , "**\n" , "*\n" , ); $s = ''; for($i=0; $i<11; $i++) { $s .= $a[$i]; } return $s; } function performance( $func ) { $start_time = microtime(true); for($i=0; $i<1000; $i++) { $func(); } $ret = $func(); printf("func %s time: %f ,result : \n%s\n\n", $func , microtime(true) - $start_time ,$ret); } performance( 'test1' ); performance( 'test2' ); performance( 'test3' ); ?>
輸出結果如下
func test1 time: 0.391411 ,result : * ** *** **** ***** ****** ***** **** *** ** * func test2 time: 0.250726 ,result : * ** *** **** ***** ****** ***** **** *** ** * func test3 time: 0.201759 ,result : * ** *** **** ***** ****** ***** **** *** ** *
哈...作弊法雖然是作弊很呆的作法 , 但有時候真的很好用 , 我會不會太處女座了 ... 去測試這些幹嘛
我也有遇過類似考題
不過他是要菱形的
當初忘了 考慮空格
寫出來的結果就是你的考題..
如果用一個迴圈作菱形有點高難度耶
有沒有 code 可以參考一下
@pigo
str_pad可以做居中的功能~
http://php.net/manual/en/function.str-pad.php
前一陣子我也有玩過排列*的練習(初學者必玩)
我無聊到用全形*來做…結果發現全形的問題很多…
因為全形不是單字元,所以很多好用函式都不能用了…
(真是自找麻煩^^b)
我是TWPUG的Shiang,最近常在TWPUG得到您的幫助,非常感謝~
是說..可以用無腦陣列嗎…XD
$star_int=array(1,2,3,4,5,6,5,4,3,2,1);
$star=array(1=>’*’,2=>’**’,3=>’***’,4=>’****’,5=>’******’,6=>’******’);
foreach($star_int as $val)
{
echo $satr[$val].”;
}
真的還挺蠢的….
喔~ 你也來啦 哈
其實查表法常常用到~ 我寫的 big5_func 就用到, 以前的版本用算的 , 挺慢的
也看過有人用查表法取代某些 WIN32 GDI 繪圖指令增加繪圖效能
有時候最直接的方法最好
效能差了點~不過這是沒有迴圈版 XD
echo implode(“\r\n”, sscanf(“************************************”,”%1s%2s%3s%4s%5s%6s%5s%4s%3s%2s%1s”));
wa … sscanf 在 PHP 我從來沒用過說 哈哈
通告: Pigo