因為沒題目了,所以我google了有趣程式
就發現一個有趣的題目: 找出1至100中,3的倍數印出Good night;5的倍數印出Happy;兩者都有則印出HI
並且題目只限制用紙筆寫出程式,不能用電腦,結果則發現只有1%的人可以寫出正確答案
題目很簡單,但魔鬼都藏在細節中
大家都習慣直接用電腦撰寫程式,發現問題後,再把BUG修正
在長期依賴電腦的情況下,就會因為過份依賴,而忽略基本的概念
這一次大家可以先自己寫一次,再用電腦跑一次
正確答案如下
int main(){
for(int run=1;run<=100;run++){
if(run%15 == 0)
printf("HI\n");
else if(run%3 == 0)
printf("Good night\n");
else if(run%5 == 0)
printf("Happy\n");
else
printf("%d\n",run);
}
return 0;
}
我猜測許多人錯誤是因為大家都按照題目給的指示而撰寫程式
所以會變成這樣
int main(){
for(int run=1;run<=100;run++){
if(run%3 == 0)
printf("Good night\n");
else if(run%5 == 0)
printf("Happy\n");
else if(run%15 == 0)
printf("HI\n");
else
printf("%d\n",run);
}
return 0;
}
我們可以看到輸出結果都沒有HI的輸出
而兩者都有(則15的倍數)只印出Good night
因為我們是利用if、else if的語法
如果前面的if已滿足條件,後面的else if及else 則不會有輸出
==================結論==================
因此我們在思考程式時,要優先考慮條件的順序
3的倍數印出Good night;5的倍數印出Happy;兩者都有則印出HI
因為最優先考慮的是是否乎合3與5的倍數這條件
其次則是,是否乎合5的倍數或是是否乎合3的倍數