回形填数与蛇形填数问题(Java)
一、问题描述:
当给出N*N的矩阵,要求填入下列形式的数:
1. 回形填数
例如:
当N=5时,有
当N=5时,有
25 | 10 | 11 | 12 | 13 |
24 | 9 | 2 | 3 | 14 |
23 | 8 | 1 | 4 | 15 |
22 | 7 | 6 | 5 | 16 |
21 | 20 | 19 | 18 | 17 |
当N=6时,有
36 | 17 | 18 | 19 | 20 | 21 |
35 | 16 | 5 | 6 | 7 | 22 |
34 | 15 | 4 | 1 | 8 | 23 |
33 | 14 | 3 | 2 | 9 | 24 |
32 | 13 | 12 | 11 | 10 | 25 |
31 | 30 | 29 | 28 | 27 | 26 |
例如:
当N=5时,有
1 | 3 | 4 | 10 | 11 |
2 | 5 | 9 | 12 | 19 |
6 | 8 | 13 | 18 | 20 |
7 | 14 | 17 | 21 | 24 |
15 | 16 | 22 | 23 | 25 |
二、问题分析: 使用二维数组存储数据
三、源代码:
1.回形填数
import java.util.Scanner;
public class huixing {
public static void main(String[] args) {
int n;
Scanner input = new Scanner(System.in);
n = input.nextInt();
int m = n * n;
int[][] num = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
num[i][j] = 0;
}
}
int i = 0, j = 0;
int t = 1;
while (m > 0) {
while (i < n && i >= 0 && num[i][j] == 0) {
num[i][j] = m;
m --;
i += t;
}
i -= t;
j += t;
while (j >= 0 && j < n && num[i][j] == 0) {
num[i][j] = m;
m --;
j += t;
}
j -= t;
t = -t;
i += t;
}
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
System.out.format("%-4d", num[i][j]);
}
System.out.println();
}
System.out.println();
}
}
import java.util.Scanner;
public class shexing {
public static void main(String[] args) {
int n;
Scanner input = new Scanner(System.in);
n = input.nextInt();
int[][] num = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
num[i][j] = 0;
}
}
int i = 0, j = 0;
int m = 1;
int flag = 0;
while (m <= n * n) {
//左下动
while (i >= 0 && i < n && j >= 0 && j < n && num[i][j] ==0) {
num[i][j] = m;
m ++;
i ++;
j --;
}
i --;
j ++;
if (n % 2 == 1 && i == n -1) {
flag = 1;
}
if (flag == 0) {
i ++;
}else {
j ++;
}
//右上动
while (i >= 0 && i < n && j >= 0 && j < n && num[i][j] ==0) {
num[i][j] = m;
m ++;
i --;
j ++;
}
i ++;
j --;
if (n % 2 == 0 && j == n-1) {
flag = 1;
}
if (flag == 0) {
j ++;
}else {
i ++;
}
}
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
System.out.format("%-4d", num[i][j]);
}
System.out.println();
}
System.out.println();
}
}