「プロジェクトオイラー問28」の編集履歴(バックアップ)一覧はこちら

プロジェクトオイラー問28」(2014/02/14 (金) 08:06:27) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2028 *Problem 28 「螺旋状に並んだ数の対角線」 † 1から初めて右方向に進み時計回りに数字を増やしていき, 5×5の螺旋が以下のように生成される: 21 22 23 24 25 20 7 8 9 10 19 6 1 2 11 18 5 4 3 12 17 16 15 14 13 両対角線上の数字の合計は101であることが確かめられる. 1001×1001の螺旋を同じ方法で生成したとき, 対角線上の数字の和はいくつか? 解法 4つ角単位で計算します。 最初の1はスペシャルケース。 そのあとは右下角を基準に、左下角=右下+枠のサイズ-1、左上角=右下+(枠のサイズ-1)*2 右上角=右下+(枠のサイズ-1)*3 となります。 右下角のさらに斜め右下は(枠サイズ-1)*3+(枠サイズ+1)で逐次的に計算できます。 calc(1003,_,Sum,Sum):-!. calc(Size,Num,Sum,Result):- Sum1 is Sum+Num*4+(Size-1)*6, NextNum is Num+(Size-1)*3+(Size+1), Size1 is Size+2, calc(Size1,NextNum,Sum1,Result). main28:- calc(3,3,1,Ans), write(Ans).

表示オプション

横に並べて表示:
変化行の前後のみ表示: