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が出力された。
解速度
即