どーも、みつおです。
問題
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の螺旋を同じ方法で生成したとき, 対角線上の数字の和はいくつか?
出典:Problem28
解答
using System; namespace Problem28 { class Program { static void Main(string[] args) { Console.WriteLine(Solve()); Console.ReadLine(); } private static long Solve() { long ret = 0; int p = 1; long no = 1001 * 1001; int tmp = 1; for (long i = 1; i <= no; i++) { //枠の移動量 if (p * p <= i) { //3,5,7... p = p + 2; } //対角線上か判定 if (tmp == i) { ret += tmp; tmp = tmp + p - 1; } } return ret; } } }
出力
669171001