朝日新聞2005年5月6日のパズル横丁問題

問題

5個の円の中心にA,B,C,D,Eがある。円の重なりにあるF,G,H,Iは2つの円の数字の差分が入る。A〜Iに1〜9の数字を入れるとすると,F+G+H+Iが最大になるのはどのような時か?

解答への道(ヒント)

1〜9の数字の割り当て問題。何も考えずに数字の割り当て問題をコピーして利用する。

0は対象外なので,=0を=1に変更する。jも対象外なので削除する。

ループの真ん中では以下のような条件文を書けば終了。

if( ( a-b==f || b-a==f) &&
    ( b-c==g || c-b==g) &&
    ( c-d==h || d-c==h) &&
    ( d-e==i || e-d==i)) {
  int y = f+g+h+i;
  if( y > x ) {
    x = y;
    ps( "max:%d,a:%d,b:%d,c:%d,d:%d,e:%d,f:%d,g:%d,h:%d,i:%d\n", y, a, b, c, d, e, f, g, h, i);
  }

xはループの外で0に初期化しておく。

ちなみに初期値を100にして,if文の条件を逆にすれば最小値を求めるコードになる。最小値でやってみたら,新聞のサンプルにあるように10が出力された。

解速度