笨 wrote:
>>如果...(恕刪)
也許我用「層」來描述不是很好,應該用次數會比較恰當一些。
看起來只有一層,可是你卻連續判斷了三次,結果還是需要判斷三次。我來說給你聽。
if (i % 3 == 0)是第一次,if (i % 5 == 0)是第二次,if (j)是第三次。換句話說,不管數字是多少,你一定要判斷三次,其中可能只有一次會成立,其他兩次都是浪費時間而已。
邏輯判斷本來就會有成立或不成立兩個結果,不成功的那一次就是多餘的消費了。前面提過,不成立的判斷有可能會發生流程轉移,導致pipe line清掉重填,所以CPU會多浪費一些時間。
因此,用比較巧妙的方法,讓不成立的次數越少越好。當迴圈的次數多了,這個斤斤計較的次數,就會是效能的差異了。
第一行印一個星號, 第二行印兩個, 第三行印三個, 依此類推, 印出N行來.
當然不能直接用N行printf()印出來...
忘記 C language 了
用pseudo language 來寫的話
set n = some number.
for i = 1 to n do
{
for j = 1 to i do
{
print "*"
}
print 換行
}
再下一題, 印到第N行的時候
星號要遞減縮回去到1為止, 限制是只能用一個迴圈處理. 又打死一堆人....
這個比較困難
我想到的方法是用 recursion
set function printstars (var i,n: integer, str:string)
{
if i < n then
{
print str;
call function printerstars (i+1, n, str+"*")
print str;
}
else
print str;
}
主成式
set n = some numbers (must > 0)
call printstars (1, n, "*");
不知道這樣對不對?
http://www.mike-chen.net
http://www.flickr.com/photos/totaleclipse
內文搜尋

X