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