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

来源:互联网 发布:makerbot软件下载 编辑:程序博客网 时间:2024/06/06 02:35


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


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

1. 回形填数    
例如:
当N=5时,有
 
25101112132492314238141522765162120191817

当N=6时,有
3617181920213516567223415418233314329243213121110253130292827262. 蛇形填数

例如:
当N=5时,有
13410112591219681318207141721241516222325

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

三、源代码:

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


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




0 0
原创粉丝点击