プログラムの実行結果は以下の通り。
A:x:1, y:1, z:3 B:x:1, y:4, z:1 全部で 14 段
これを図示すると以下の通り。
プログラムのソースは以下の通り。
#include "puzutl.h" int main( int argc, cstring argv[]) { char tmp[128]; map<int,string> A, B; map<int,string>::iterator f; for( int x=1; x< 10; x++) { for( int y=1; y< 10; y++) { for( int z=1; z< 10; z++) { int step = 3*x + 2*y + 3*z; if( (x+y+z)&1) { // 合計歩数が奇数 if( (f=A.find(step)) != A.end()) { ps( "A:x:%d, y:%d, z:%d\n", x, y, z); ps( "B:%s\n", (*f).second.c_str()); ps( "全部で %d 段\n", step); exit(0); } sprintf( tmp, "x:%d, y:%d, z:%d", x, y, z); B.insert( pair<int,string>(step,tmp)); } else { if( (f=B.find(step)) != B.end()) { ps( "A:%s\n", (*f).second.c_str()); ps( "B:x:%d, y:%d, z:%d\n", x, y, z); ps( "全部で %d 段\n", step); exit(0); } sprintf( tmp, "x:%d, y:%d, z:%d", x, y, z); A.insert( pair<int,string>(step,tmp)); } } } } return 0; }