您的位置:首页 > 编程语言 > Java开发

回形填数与蛇形填数问题(Java)

2016-10-29 18:06 330 查看



回形填数与蛇形填数问题(Java)

一、问题描述:
当给出N*N的矩阵,要求填入下列形式的数:

1. 回形填数

例如:

当N=5时,有

2510111213
2492314
2381415
2276516
2120191817
当N=6时,有

361718192021
351656722
341541823
331432924
321312111025
313029282726
2. 蛇形填数

例如:
当N=5时,有

1341011
2591219
68131820
714172124
1516222325


二、问题分析:
使用二维数组存储数据

三、源代码:

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

;
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();
}

}


2.蛇形填数
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

;
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();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息