朝日新聞2005年7月8日のパズル横丁問題

問題

Bさんが20歳になるまで,Aさんの年齢がBさんの年齢の整数倍になる年が6回ある。BさんとAさんの年齢差は?

年齢差は16歳以下で,同い年ではない。

解答への道(ヒント)

問題ではAさんのとBさんの関係は兄弟である。

同時に年齢を重ねるなんてことはないだろうから,生まれ月を考慮する必要があるんじゃないの?

と思いつつも問題文からそのまま以下のコードを作成。

  for( int b=1; b<= 16; b++) {   // 年齢差
    int cnt = 0;                // 整数倍になった回数
    for( int a=1; a < 20; a++) { // 20まで
      if( 年齢差が整数倍) cnt++;
    }
    if( cnt >= 6) {
      解発見
    }
  }

実行したら解が1件出てきた。

多分これが解なんだろうけど,普通どちらかが先に誕生日を迎えるだろうから,1年に誕生日の差は2回あるでしょう。

例えば弟7月7日生まれ,兄10月10日生まれとすると,以下のようなのも解と認められるんじゃないの?

2005年 7月 7日 弟  0 歳,兄  8 歳
2005年10月10日 弟  0 歳,兄  9 歳
2006年 7月 7日 弟  1 歳,兄  9 歳, 9倍
2006年10月10日 弟  1 歳,兄 10 歳
2007年 7月 7日 弟  2 歳,兄 10 歳, 5倍
2007年10月10日 弟  2 歳,兄 11 歳
2008年 7月 7日 弟  3 歳,兄 11 歳
2008年10月10日 弟  3 歳,兄 12 歳, 4倍
2009年 7月 7日 弟  4 歳,兄 12 歳, 3倍
2009年10月10日 弟  4 歳,兄 13 歳
2010年 7月 7日 弟  5 歳,兄 13 歳
2010年10月10日 弟  5 歳,兄 14 歳
2011年 7月 7日 弟  6 歳,兄 14 歳
2011年10月10日 弟  6 歳,兄 15 歳
2012年 7月 7日 弟  7 歳,兄 15 歳
2012年10月10日 弟  7 歳,兄 16 歳
2013年 7月 7日 弟  8 歳,兄 16 歳, 2倍
2013年10月10日 弟  8 歳,兄 17 歳
2014年 7月 7日 弟  9 歳,兄 17 歳
2015年10月10日 弟  9 歳,兄 18 歳, 2倍

どう?

こういう問題は簡単問題として出題されるけど,出題者の意図に沿わない解が増えて正解率が下がるんだろうな。

あ,数え年を使えば同時に歳をとるから誕生日に依存するようなことはないか。

でも今日日数え年で年齢を勘定する人はいないか。

(2005.07.22)正解率は94%だって。問題が問題だけに流石に間違える人は少なかったか。