朝日新聞2004年6月19日パズルパーク解答

ソースは短いから直接載せちゃう。

#include "puzutl.h"
int idays[13] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int main( int argc, cstring argv[])
{
  int first = 0, last = 0, cnt = 0, maxFirst, maxLast, cntMax = 0;
  char buf[10];
  for( int m=1; m<= 12; m++) {
    for( int d=1; d <= idays[m]; d++) {
      sprintf( buf, "%d%d", m, d);
      YesNo     ynOK = YES;
      cstring s = buf; while(*s) if(*s++=='0') ynOK=NO;
      if( ynOK) {
        if( first == 0) first = m*100 + d;
        last = m*100 + d;
        cnt++;
        if( cnt > cntMax) { maxFirst = first; maxLast = last; cntMax = cnt;}
      }
      else {
        first = 0;
        cnt = 0;
      }
    }
  }
  ps( "%d月%d日〜%d月%d日まで%d日間\n", maxFirst/100, maxFirst%100, maxLast/100, maxLast%100, cntMax);
  return 0;
}

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

2月21日〜3月9日まで18日間