条件分岐の仕方・Javaソースコードの書き方

if文が「真」になる回数

例えば

  • 「単純な考え方」で条件分岐の処理をして、
    if文が「真」になる回数が3回の場合と、
  • 「巧みな考え方」で条件分岐の処理をして、
    if文が「真」になる回数が2回の場合について、

「単純な考え方」の場合、if文が「真」になる回数が1回多いけれど、「単純な考え方」で条件分岐の処理をするほうが「わかりやすい」と思います。

ビリヤードの球の問題

先日「ビルゲイツの面接試験」という雑誌記事を、読みました。面接の質問で、ビリヤードの球の問題について、質問がありました。

「ビリヤードの球が8個あります。そのうち1個は欠陥品で、他よりも重くなっています。天秤を使い、重さを2回量るだけで、どの球が欠陥品か見分けなさい」

この問題は、コンピュータのプログラミング能力を見極めるのに「良い問題」だそうです。シミュレーションする能力を調べる問題と言えます。

単純な考え方

まずは「単純な考え方」で、欠陥品のビリヤードの球を見つける方法を書きます。
「重さ」を、3回量ります。

解答例

  1. 8個の球を、4個と4個に分けます。
    ▲○●● ■■■■
    ここでは、記号文字で球を示します。
  2. 1回目は、4個のグループを量ります。
    重たいほうの4個のグループに、欠陥品があります。
    ここでは「▲○●● グループ」に、欠陥品があるとします。
  3. 「▲○●● グループ」を、2個と2個のグループに分けます。
    ▲○ ●●
  4. 2回目は、2個のグループを量ります。
    重たいほうの2個のグループに、欠陥品があります。
    ここでは「▲○ グループ」に、欠陥品があるとします。
  5. ▲○ グループを、1個と1個に分けます。
    ▲ ○
  6. 3回目は、▲ と ○ を、量ります。
    重たいほうが欠陥品です。

以上の手順の場合、分岐処理は次のようになります。
ビリヤードの8個の球 ▲○●● ■■■■ について。

「単純な考え方」の分岐処理
もし ▲○●● のほうが重たいなら
        「▲○●● グループ」に、欠陥品があります。
そうでないなら
        「■■■■ グループ」に、欠陥品があります。

ここでは「▲○●● グループ」に、欠陥品があるとします。

もし ▲○ のほうが重たいなら
        「▲○ グループ」に、欠陥品があります。
そうでないなら
        「●● グループ」に、欠陥品があります。

ここでは「▲○ グループ」に、欠陥品があるとします。

もし ▲ のほうが重たいなら
        ▲ が、欠陥品です。
そうでないなら
        ○ が、欠陥品です。

「単純な考え方」で欠陥品のビリヤードの球を見つける場合、「重さ」を3回量ります。
つまり、もしという分岐処理が―― if文の条件式が――3回「真」になります。

巧みな考え方

次は「巧みな考え方」で、欠陥品のビリヤードの球を見つける方法を書きます。
「重さ」を、2回量ります。

解答例

  1. 8個の球を、3個・3個・2個に分けます。3つのグループに分ける事が、巧みな(奇妙な?)考え方だと思います。
    ●●● ■■■ ▲▲
    ここでは、記号文字で球を示します。
  2. 1回目は、3個のグループを量ります。
    ●●● ■■■
  3. 次の「2通り」の結果があります。
  • (結果その1)●●● ■■■ 「両者の重さ」が同じの場合。
    2回目は、2個のグループ ▲▲ を量ります。
    どちらか重いほうが、欠陥品です。
  • (結果その2)●●● ■■■ 一方が重い場合。
    欠陥品は、重い3個のグループにあります。
    ここでは重いグループを「●1 ●2 ●3」とします。
    2回目は、重いグループから2個選び、量ります。
    ●1 ●2
    ●1または●2の一方が重ければ、それが欠陥品です。
    ●1と●2が「同じ重さ」なら、●3が欠陥品です。

以上の手順の場合、分岐処理は次のようになります。
ビリヤードの8個の球 ●●● ■■■ ▲▲ について。

「巧みな考え方」の分岐処理
もし ●●● のほうが重たいなら
        欠陥品は ●●● にあります。ここでは ●1 ●2 ●3 とします。
        もし ●1 のほうが重たいなら
                ●1 が、欠陥品です。
        そうではなく、もし ●2 のほうが重たいなら
                ●2 が、欠陥品です。
        そうでないなら
                ●3 が、欠陥品です。

そうではなく、もし ■■■ のほうが重たいなら
        欠陥品は、 ■■■ にあります。ここでは ■1 ■2 ■3 とします。
        もし ■1 のほうが重たいなら
                ■1 が、欠陥品です。
        そうではなく、もし ■2 のほうが重たいなら
                ■2 が、欠陥品です。
        そうでないなら
                ■3 が、欠陥品です。

そうでないなら
        ●●● と ■■■ の重さは同じです。
        よって ▲▲ の重いほうが欠陥品です。ここでは ▲1 ▲2 とします。
        もし ▲1 のほうが重たいなら
                ▲1 が、欠陥品です。
        そうでないなら
                ▲2 が、欠陥品です。

「巧みな考え方」で欠陥品のビリヤードの球を見つける場合、「重さ」を2回量ります。
つまり、もしという分岐処理が―― if文の条件式が――2回「真」になります。

「単純な考え方」のほうが、わかりやすい

簡単「単純な考え方の分岐処理」と「巧みな考え方の分岐処理」のどちらが、理解しやすいでしょうか?

本記事では「単純な考え方の分岐処理」のほうが「わかりやすい」という結論にしたい、と思います。

※この記事は、2004年8月当時の記事になります。

コンピューター
この記事をシェアする

グッズ・メモランダム