朝日新聞2006年8月18日パズル横丁解答

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

Find 8月4日 から 8月28日まで

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

#include "puzutl.h"

void check_sumdays( int iday)
{
  int           istart = iday;  // 開始日を記憶しておく
  int           sum = 0;
  while( iday <= 31) {          // 8月は31日まで
    sum         += iday;
    if( sum > 400) return;
    if( sum == 400) {
      ps( "Find 8月%d日 から 8月%d日まで\n", istart, iday);
    }
    iday++;
  }
  // 念のため9月にまたがる部分も調べてみる。
  iday          = 1;            // 9月1日から追加
  while( iday <= 30) {          // 9月は最大30日まで
    sum         += iday;
    if( sum > 400) return;
    if( sum == 400) {
      ps( "Find 8月%d日 から 9月%d日\n", istart, iday);
    }
    iday++;
  }
}

int main( int argc, cstring argv[])
{
  for( int iday=1; iday<= 31; iday++) { // 8月1日から31日まで調べる
    check_sumdays( iday);       // 合計が400になるものがあるか
  }
  return    0;
}