More Related Content
Similar to C言語の課題を(エクストリームに)解こう #1 (20)
More from University of Tsukuba Linux User Group (8)
C言語の課題を(エクストリームに)解こう #1
- 9. 例えばこんな例も...
0000 0001 -> 1
1111 1111 -> -1 (2の補数表現)
0000 0010 -> 2
1111 1110 -> -2 (2の補数表現)
0000 0011 -> 3
1111 1101 -> -3
なんだか気付きませんか?
- 14. 一般的なやり方
if(a < 0 && a > 100) {
if(a >= 50) { puts("A"); }
else { puts("B"); }
}
else { puts("error"); }
こんな感じだと思うのですが
いかがでしょう?
やり方は、いっぱいありますが。
- 16. 人力最適化。
if(a >= 0 && a <= 100) {
if(a >= 50) { puts("A"); }
else { puts("B"); }
}
else { puts("error"); } error は最大 2 回の比較。
A, B は 3 回の比較。
という感じになります。
- 17. 人力最適化。
たとえば、違う実装。
if(i >= 50 && i <= 100) { puts("A"); }
else if(i < 50 && i >= 0) { puts("B"); }
else { puts("error"); }
error は 3 回の比較。
A, B は最大 3 回の比較。
コードを短くすればいいというものではない。
- 18. 人力最適化
if(i >= 50) {
if(i <= 100) { puts("A"); }
else { puts("error"); }
}
else { error は 2 回の比較
if(i >= 0) { puts("B"); } A, B も 2 回の比較
else { puts("error"); }
} 完璧じゃない?
ご想像にお任せします。