1 분 소요

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();
 }
 } 
}

image

댓글남기기