どーも、みつおです。
問題
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


コメント