剛剛看到一個網頁:
http://www.codinghorror.com/blog/archives/000781.html
"FizzBuzz Questions"
Write a program that prints the numbers from 1 to 100. But for multiples of three print "Fizz" instead of the number and for the multiples of five print "Buzz". For numbers which are multiples of both three and five print "FizzBuzz".
Most good programmers should be able to write out on paper a program which does this in a under a couple of minutes. Want to know something scary? The majority of comp sci graduates can't. I’ve also seen self-proclaimed senior programmers take more than 10-15 minutes to write a solution.
講中文的話就是:
印出 1 到 100,但如果是 3 的倍數就印 Fizz,如果是 5 的倍數就印 Buzz,如果同時是 3 和 5 的倍數就印 FizzBuzz。
購簡單吧? 但據上面那篇文章的作者 200個programmer中有199個寫不出來, 或寫錯..
挑戰一下吧..(拜託別用google找答案)
#include<stdio.h>
void main(void) {
int LoopCount0;
for(
LoopCount0=1;
LoopCount0<=100;
LoopCount0++
) {
if(LoopCount0%3==0) {
if(LoopCount0%5==0) {
printf("FizzBuzz...");
}else {
printf("Fizz...");
}
}else if(LoopCount0%5==0) {
printf("Buzz...");
}else {
printf(
"%d...",
LoopCount0
);
}
}
printf("\n");
}
如果不看for本身的條件判斷,這個方式的條件判斷深度最大(固定)是兩層。好像是極限了,沒辦法再縮減到只有一層。
修正,上一段話應該說:如果不看for本身的條件判斷,這個方式要得到最後結果,worst-case會經歷過兩次判斷式,以及兩次除法取餘運算。好像是極限了,沒辦法再縮減到只有一次。
少一點條件判斷,程式碼少花工夫達成相同結果,提升效能。而且現代的CPU都有pipe line,條件判斷失敗會導致pipe line清空重填,多浪費一些時間。 條件判斷越少,越不容易發生這種時間浪費。
執行結果:
1...2...Fizz...4...Buzz...Fizz...7...8...Fizz...Buzz...11...Fizz...13...14...Fiz
zBuzz...16...17...Fizz...19...Buzz...Fizz...22...23...Fizz...Buzz...26...Fizz...
28...29...FizzBuzz...31...32...Fizz...34...Buzz...Fizz...37...38...Fizz...Buzz..
.41...Fizz...43...44...FizzBuzz...46...47...Fizz...49...Buzz...Fizz...52...53...
Fizz...Buzz...56...Fizz...58...59...FizzBuzz...61...62...Fizz...64...Buzz...Fizz
...67...68...Fizz...Buzz...71...Fizz...73...74...FizzBuzz...76...77...Fizz...79.
..Buzz...Fizz...82...83...Fizz...Buzz...86...Fizz...88...89...FizzBuzz...91...92
...Fizz...94...Buzz...Fizz...97...98...Fizz...Buzz...
內文搜尋

X