123456789 填入3x3的矩形中,使其横竖斜相加和等于15.
代码实现!

解决方案 »

  1.   

    public class Test
    {
    public static int[][] matrix = new int[3][3];
    public static boolean[] flag = new boolean[9];

    public static void init()
    {
    int i;
    for(i = 0; i < 9; i++)
    {
    flag[i] = false;
    }
    }

    public static void calculateMatrix(int step)
    {
    if(9 == step)
    {
    int j;

    for(j = 0; j < 3; j++)
    {
    int sum = 0;
    int k;
    for(k = 0; k < 3; k++)
    {
    sum += matrix[j][k];
    }
    if(15 != sum)
    {
    return;
    }
    }

    for(j = 0; j < 3; j++)
    {
    int sum = 0;
    int k;
    for(k = 0; k < 3; k++)
    {
    sum += matrix[k][j];
    }
    if(15 != sum)
    {
    return;
    }
    }

    if(15 != matrix[0][0] + matrix[1][1] + matrix[2][2])
    {
    return;
    }

    if(15 != matrix[0][2] + matrix[1][1] + matrix[2][0])
    {
    return;
    }

    for(j = 0; j < 3; j++)
    {
    int k;
    for(k = 0; k < 2; k++)
    {
    System.out.print(matrix[j][k]);
    System.out.print(" ");
    }
    System.out.println(matrix[j][2]);
    }
    System.out.println();
    System.out.println();
    }

    int i;
    for(i = 0; i < 9; i++)
    {
    if(!flag[i])
    {
    flag[i] = true;
    matrix[step/3][step%3] = i+1;
    calculateMatrix(step+1);
    flag[i] = false;
    }
    }
    }

    public static void main(String[] args)
    {
    init();
    calculateMatrix(0);
    }
    }