プログラムの実行結果は以下の通り。
Find: 初期状態 親:2匹, 子:8匹, 10週後: 親:618, 子:382, 総数:1000
プログラムのソースは以下の通り。
#include "puzutl.h" void next_week( int parent0, // 初期親の数 int son0, // 初期子供の数 int parent, // 現在の親の数 int son, // 現在の子供の数 int egg, // 卵の数 int week) { int total = parent + son + egg; // 親は死なず,卵が孵る if( total > 1000) return; // 1000匹を超えたら題意を満たさない if( total == 1000) { ps( "Find: 初期状態 親:%d匹, 子:%d匹, %d週後: 親:%d, 子:%d, 総数:%d\n", parent0, son0, week, parent+son, egg, total); return; } next_week( parent0, son0, parent+son, // 子供が親になる egg, // 卵が孵って子供になる parent+son, // 親と親になった子供が卵を産む week+1); } int main( int argc, cstring argv[]) { int parent, son; for( parent=0; parent<= 10; parent++) { son = 10 - parent; next_week( parent, son, parent, son, parent/*卵*/, 1/*週*/); } return 0; }