알고리즘,손코딩 문제

프로젝트 오일러 문제 28 : 1001 X 1001 행렬을 만들었을 때 대각선 상의 숫자를 더하면 얼마나 됩니까?

알통몬_ 2017. 3. 11. 20:59
반응형

 


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

숫자 1부터 시작해서 우측으로부터 시계방향으로 감아 5 X 5 행렬을 만들면 아래와 같이 됩니다.

 

여기서 대각선상의 숫자를 모두 더한 값은 101입니다.

같은 방식으로 1001 X 1001 행렬을 만들었을 때, 대각선상의 숫자를 더하면 얼마가 됩니까?


public class Question {


public static void main(String[] args) {

int k = 2;

int F = 2;

int m = 500, n = 500;

int sum = 0;

int[][] num = new int[1001][1001];

num[m][n] = 1;

while (F < 1002) {

if (F % 2 == 0) {

for (int i = 1; i < F; i++) {

n = n + 1;

num[m][n] = k;

k++;

}

for (int j = 1; j < F; j++) {

m = m + 1;

num[m][n] = k;

k++;

}

} else if (F % 2 != 0) {

for (int i = 1; i < F; i++) {

n = n - 1;

num[m][n] = k;

k++;

}

for (int j = 1; j < F; j++) {

m = m - 1;

num[m][n] = k;

k++;

}

}

F++;

}

for (int a = 1; a < F - 1; a++) {

num[0][a] = k;

k++;

}

for (int i = 0; i < 1001; i++) {

sum += num[i][i];

}

System.out.println(sum);

for (int i = 0; i < 1001; i++) {

sum += num[1000 - i][i];

}

System.out.println(sum - 1);

}

}

반응형