2008년 8월 29일 금요일

자바 마방진





public class Mabangjin
{
public static void main(String args[])
{
//배열을 6으로 만드세요
//님이 사용한 로직은 5를 사용했는데
//그러면 0,1,2,3,4 이런식으로 첨자가 사용 되어야합니다.
//하지만 이 프로그램에서는 5까지 사용하니 6으로 해야
//에러가 발생하지 않습니다.
//의문점 쪽지 주세요
int a[][] = new int[6][6];
int i=1;
int j=(5/2)+1;

for(int k=1;k<=25;k++)
{
System.out.println("i="+i+"j="+j);
a[i][j]=k;
if(k%5==0)
{
i=i+1;
}
else
{
i=i-1;
j=j+1;
}

if(i<1)
{
i=5;
}
else if(j>5)
{
j=1;
}

}
//여기도 수정 x y 값수정
for (int x = 1; x < 6; x++)
{
for (int y = 1; y< 6; y++)
{
//출력을 보기 좋게
System.out.printf("%3d",a[x][y]);
}
System.out.println();
}


}
}

//문]
//a[i][j]=k;에서 배열의 범위를 벗어났다고하네요
//제가 봤을때는 이상없는것 같은데 ㅜ.ㅜ
//고수님들 좀 봐주세요 실행화면도 같이 해주시면 좋고요
//부탁드립니다 밑에는 소스입니다

아래는 다른 로직 마방진 프로그램입니다
import java.util.*;

public class MagicSquare {
    public static void main(String[] args) {
        int n = 5; // 마방진의 크기 (홀수만 가능)
        if (n % 2 == 0) {
            System.out.println("마방진은 홀수 크기만 가능합니다.");
            return;
        }
        
        int[][] magicSquare = generateMagicSquare(n);
        printMagicSquare(magicSquare);
    }

    public static int[][] generateMagicSquare(int n) {
        int[][] magicSquare = new int[n][n];

        int row = 0; // 시작 위치: 첫 행의 가운데 열
        int col = n / 2;
        int num = 1;

        while (num <= n * n) {
            magicSquare[row][col] = num;

            // 위로 이동 (위로 나가면 아래로 이동)
            int nextRow = (row - 1 + n) % n; 
            // 오른쪽으로 이동 (오른쪽으로 나가면 왼쪽으로 이동)
            int nextCol = (col + 1) % n; 
            // 이미 채워져 있으면 아래로 이동
if (magicSquare[nextRow][nextCol] != 0) {
                nextRow = (row + 1) % n;
                nextCol = col;
            }

            row = nextRow;
            col = nextCol;
            num++;
        }

        return magicSquare;
    }

    public static void printMagicSquare(int[][] magicSquare) {
        int n = magicSquare.length;
        System.out.println("마방진 (" + n + "x" + n + "):");
        for (int[] row : magicSquare) {
            for (int num : row) {
                System.out.printf("%4d", num);
            }
            System.out.println();
        }
    }
}


Output:

마방진 (5x5):
  17  24   1   8  15
  23   5   7  14  16
   4   6  13  20  22
  10  12  19  21   3
  11  18  25   2   9

댓글 없음:

댓글 쓰기

-


Sidewinder


World


FishMusic


LaughingBaby