📄 huanfang.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 + -