(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;
}