public class MagicSquareTest {
public static void main(String[] args) {
int[][] data = new int[5][5];
// 마방진의 첫 번쨰 숫자(1)가 채워지는 자리는 첫 줄 가운데 열이다.
int i = 0 , j = 2;
// Math.pow(x,y) : x의 y승을 계산한다.
for(int k=1; k<Math.pow(5,2); k++) {
data[i][j] = k;
// 방금 배열에 채운 숫자(k)가 5의 배수면 다음 숫자가 채워질 위치는 행만 1 증가 시킨다.
// 5의 배수가 아니면 다음 숫자가 채워질 위치는 오른쪽, 위 방향(행은-1, 열은+1)으로 변경한다.
if(k % 5 ==0) {
i++;
}else {
if(--i < 0) {
// 행이 배열의 범위를 벗어나면 마지막 행으로 변경한다.
i = 4;
}
if(++j ==5) {
// 열이 배열의 범위를 벗어나면 첫번째(0)열로 변경한다.
j=0;
}
}
}
for(i=0 ; i<5 ; i++){
for(j=0 ; j<5 ; j++) {
System.out.printf("%2d ", data[i][j]);
}
System.out.println();
}
}
}
import java.util.Scanner;
public class MagicSquareTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n;
while(true) {
System.out.println("배열의 차수를 홀수로 입력하세요 : ");
n = sc.nextInt();
if(n%2==1) {
break;
}
System.out.println("홀수를 입력하세요!!!");
}
//입력받은 배열의 차수만큼 배열을 선언한다.
int[][] data = new int [n][n];
// 숫자가 채워질 첫번째 위치(첫 줄 가운데) 를 계산한다.
int i = 0, j =n /2;
for(int k=1; k<Math.pow(n,2); k++) {
data[i][j] = k;
if(k % n ==0) {
i++;
}else {
if(--i < 0) {
i = n-1;
}
if(++j == n) {
j=0;
}
}
}
for(i=0 ; i<n ; i++){
for(j=0 ; j<n ; j++) {
System.out.printf("%2d ", data[i][j]);
}
System.out.println();
}
}
}

댓글남기기