朝日新聞2006年4月21日パズル横丁解答

(2006.5.12)いやー,思い切りミスしてしまった。正解は25だって。答えが合っているという前提で解説を書いてしまった。恥ずかしい。間違いの原因を考えると,4月18日に私にとって大変なことが起きたので,その影響かもしれない。

プログラムの実行結果は以下の通り。

靴下の数:27 <=正解は25

最悪の場合は赤9本,白9本,白8本のように26本になっている場合。<=最悪の場合は赤7本,白9本,白8本のように24本になっている場合

次に赤の靴下でも白の靴下でも出せばイカ10本,タコ8本で同じ色の靴下を履くことが出来る。

プログラムのソースは以下の通り。

#include "puzutl.h"

int maxlevel = 0;               // 靴下の数
void find( int level, int r, int w)
{
  if( (r >= 10 && w >= 8) ||    // 違う色で両方に靴下を履かせることが出来る
      (r >=  8 && w >=18) || <=ここを10にすると正解の25が出力される,18のまま間違いに気づかなかった
      (r >= 18 || w >=18)) {    // 同じ色が18色揃えば両方に履かせることが出来る
    if( level > maxlevel) maxlevel = level;
    return;
  }
  find( level+1, r+1, w+0);
  find( level+1, r+0, w+1);
}

int main( int argc, cstring argv[])
{
  find( 1, 1, 0);
  find( 1, 0, 1);
  ps( "靴下の数:%d\n", maxlevel);
  return    0;
}