Problem 28
Number spiral diagonals
Starting with the number 1 and moving to the right in a clockwise direction a 5 by 5 spiral is formed as follows:s
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13
It can be verified that the sum of the numbers on the diagonals is 101.
What is the sum of the numbers on the diagonals in a 1001 by 1001 spiral formed in the same way?
螺旋数阵对角线
从1开始,按顺时针顺序向右铺开的5 × 5螺旋数阵如下所示:
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13
可以验证,该数阵对角线上的数之和是101。
以同样方式构成的1001 × 1001螺旋数阵对角线上的数之和是多少?
package projecteuler;
import org.junit.Test;
public class Prj28 {
/**
* Starting with the number 1 and moving to the right in a clockwise direction a 5 by 5 spiral is formed as follows:
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
It can be verified that the sum of the numbers on the diagonals is 101.
What is the sum of the numbers on the diagonals in a 1001 by 1001 spiral formed in the same way?
*/
@Test
public void test(){
System.out.println(Calculator.calculate());
}
public static class Calculator{
public static int calculate(){
int lastEnd = 1;
int sum = 1;
for( int i = 3; i <= 1001; i = i + 2 ){
int [] fourAngle = getFourAngle( lastEnd + i - 1, i - 1 );
sum += fourAngle[0];
sum += fourAngle[1];
sum += fourAngle[2];
sum += fourAngle[3];
System.out.print(fourAngle[0] + "," + fourAngle[1] + "," + fourAngle[2] + "," + fourAngle[3]);
System.out.println();
lastEnd = fourAngle[3];
}
return sum;
}
private static int[] getFourAngle(int startPt, int interval) {
return new int[]{ startPt , startPt + interval, startPt + 2 * interval , startPt + 3 * interval};
}
}
}