⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 huanfang.java

📁 实现幻方运算
💻 JAVA
字号:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class huanfang{

    public static int mat[][];

    public static void main(String[] args) {

        System.out.print("输入一个整数: ");

        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        int r = 0;
        try {
            String st = in.readLine();
            Integer i = new Integer(st);
            r = i.intValue();
        }
        catch (IOException e) {
            e.printStackTrace();
        }

        mat = new int[r][r];
        if (r % 2 != 0)
            mat = oddnumber(r);
        else if (r % 4 == 0)
            mat = deven(r);
        else
            mat = seven(r);

        print(r);
    }

    public static int[][] oddnumber(int r) {
        final int SIZE = r;
       int mat[][] = new int[SIZE][SIZE];
        int i = 0, j, k, n;
        n = SIZE;
        j = n / 2;
        for (k = 1; k <= n * n; k++) {
            mat[i][j] = k;
            if (k % n == 0) {
                i = (i + 1) % n;
            }
            else {
                i = (i - 1 + n) % n;
                j = (j + 1) % n;
            }
        }

        return mat;

    }
    public static int[][] deven(int r) {

        final int n = r;

        int i, j, k, L, m;

        for (i = 1; i <= n; i++) {
            for (j = 1; j <= n; j++) {

                if (j % 4 > 1)
                    m = 1;
                else
                    m = 0;
                k = n - i - (n - 2 * i + 1) * m;
                if (i % 4 > 1)
                    m = 1;
                else
                    m = 0;
                L = n - j + 1 - (n - 2 * j + 1) * m;
                mat[i - 1][j - 1] = k * n + L;
            }

        }

        return mat;

    }

    public static int[][] seven(int r) {

        final int n = r;

        int i, j, k;

        deven(n - 2); 
        k = (n - 2) / 4;
        for (i = n - 1; i >= 2; i--) {

            for (j = 2; j <= n - 1; j++) {
                mat[j - 1][i - 1] = mat[j - 2][i - 2] + 8 * k + 2; 
            }
        }
        for (i = 1; i <= n - 2; i++) {

            mat[i - 1][0] = 0;
            mat[0][i - 1] = 0;

        }
        mat[0][0] = 1;
        mat[n - 1][n - 1] = n * n;
        mat[n - 1][0] = 4;
        mat[0][n - 1] = n * n - 3;
        mat[n - 2][0] = 10;
        mat[1][n - 1] = 3;
        mat[2][n - 1] = 5;
        mat[3][n - 1] = 7;
        mat[n - 1][n - 3] = 2;
        mat[n - 1][n - 2] = 9;
        mat[0][1] = 6;
        mat[0][2] = 8;

        for (i = 4; i <= k + 2; i++)
            mat[0][i - 1] = i + 7;
        for (j = 5; j <= k + 3; j++)
            mat[j - 1][n - 1] = k + 5 + j;
        for (i = 2 * k + 2; i <= 3 * k; i++)
            mat[n - 1][i - 1] = 7 + i;
        for (j = 2 * k + 3; j <= 4 * k; j++)
            mat[j - 1][0] = k + 5 + j;
        for (i = 3 * k + 1; i <= 4 * k - 1; i++)
            mat[n - 1][i - 1] = 2 * k + 5 + i;
        for (j = k + 4; j <= 2 * k + 2; j++)
            mat[j - 1][n - 1] = 5 * k + 1 + j;
        for (i = k + 3; i <= 2 * k + 1; i++)
            mat[0][i - 1] = 6 * k + 1 + i;

        for (i = 2; i <= n - 1; i++) {
            if (mat[i - 1][0] == 0)
                mat[i - 1][0] = n * n + 1 - mat[i - 1][n - 1];

            else
                mat[i - 1][n - 1] = n * n + 1 - mat[i - 1][0];
            if (mat[0][i - 1] == 0)
                mat[0][i - 1] = n * n + 1 - mat[n - 1][i - 1];
            else
                mat[n - 1][i - 1] = n * n + 1 - mat[0][i - 1];
        }

        return mat;

    }

    public static void print(int r) {
        for (int i = 0; i < r; i++) {
            int sum = 0;
            for (int j = 0; j < r; j++) {
                System.out.print(mat[i][j] + "\t");
                sum = sum + mat[i][j];
            }
            System.out.print("该行的和为:" + sum);
            System.out.println();
            if (i == r - 1) {
                System.out.println("每列的和为:");
                int sumx = 0;
                for (int m = 0; m < r; m++) {
                    int suml = 0;
                    for (int n = 0; n < r; n++) {

                        suml = suml + mat[n][m];
                        if (m == n)
                            sumx = sumx + mat[n][m];
                    }
                    System.out.print(suml + "\t");
                }
                System.out.print("对角线的和为:" + sumx);
            }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -