朝日新聞2005年4月15日パズル横丁解答

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

2年目の友達は 20 人,5 年後に 100 人
2 年後 : 20 人
3 年後 : 40 人
4 年後 : 60 人
5 年後 : 100 人

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

#include "puzutl.h"

YesNo sumfriend( int s0, int s1, int s2, int n)
{
  int s = s1 + s2;
  if( s > 100) return NO;
  if( s == 100) {
    ps( "2年目の友達は %d 人,%d 年後に 100 人\n", s0, n);
    // 一応検算結果を出力する。
    int sum = s0;
    int pre1 = 0, pre2 = s0;
    for( int i=2; i<= n; i++) {
      sum = pre1 + pre2;
      ps( "%d 年後 : %d 人\n", i, sum);
      pre1 = pre2;
      pre2 = sum;
    }
    return    YES;
  }
  return sumfriend( s0, s2, s, n+1);
}

int main( int argc, cstring argv[])
{
  for( int i=1; i< 100; i++) {
    if( sumfriend( i, 0, i, 2)) break;
  }
  return    0;
}