java实现三宫格及其扩展_Java和JavaScript实现扩展的九宫格算法

本文介绍如何用Java和JavaScript实现三宫格及扩展的九宫格算法。通过二维数组存储数字,遵循特定的索引规则填充矩阵,确保行、列及对角线上的数字和相等。文章提供详细的代码实现,包括Java的Grid9类和JavaScript的实现。
摘要由CSDN通过智能技术生成

要求:根据输入的数字n,如:3,5,7...以矩阵显示n行n列数,这些数由1~n*n构成,要求矩阵的每行每列及对角线上n个数之和相等预备知识:在距阵中,1在第一行正中,随后的数字应放到上一个数字的右上方方格中,如果向上不行,就放到该列的最下方格子;如果向右不行,就放到该行的最左边;如果都不行,就放到上一个数字的正下方;如果目标格子中已经有数字,也放到上一个数字的正下方思路:1) 使用2维数组预备存储1~n*n这些数字2) 1是放到第一行正中的,所以其索引号是:[0][(n-1)/2]3) 随后的数字,其索引号原则如下     1> num的行索引为 num-1 的 (行索引-1) ,  num的列索引为 num-1 的 (列索引+1)     2>如果发现num的行,列索引都越位(-1或n),则           num的行索引为 num-1 的 (行索引+1) ,  num的列索引为 num-1 的 (列索引)     3>如果发现num的行,列索引指向的位置已经有数字,则           num的行索引为 num-1 的 (行索引+1) ,  num的列索引为 num-1 的 (列索引)     4>如果发现num的行越位(-1),则           num的行索引为n-1     5>如果发现num的列越位(n),则           num的列索引为0下面是Java和JavaScript的实现*******************************************************************************************Grid9.java---------------------------------------------------import java.util.Scanner;class Grid9 { public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println ("请输入行数:");int n = sc.nextInt();System.out.println ();//n必须为奇数if(n%2==0)n--;//n必须大于等于3if(n<3)n = 3;//创建数组-->类似双层集合,可像使用多维数组一样式样它//所有成员初始化为 0int[][] ary = new int[n][n];//一行正中的位置int mid = (n-1)/2;//当前数字int num = 1;//当前行,列int currRow = 0;int currCol = mid;//下一行,列int nextRow,nextCol;while(num<=n*n) {ary[currRow][currCol] = num;num++; //下一个数nextRow = currRow-1; //下一个数的行索引 nextCol = currCol+1; //下一个数的列索引//如果下一个数字的行和列的索引都不合法,行索引变为 (当前数字的行索引+1),列索引变为 (当前数字的列索引)if(nextRow<0 && nextCol>=n) {nextRow = currRow+1;nextCol = currCol;}//如果下一个数字的行索引小于0,就把其行索引变为 (5-1)else if(nextRow<0) {nextRow = n-1;}//如果下一个数字的列索引等于5,就把其列索引变为 (0)else if(nextCol>=n) {nextCol = 0;}//如果本应放下一个数字的位置已经有值的话,行索引变为 (当前数字的行索引+1),列索引变为 (当前数字的列索引)else if(ary[nextRow][nextCol]>0) {nextRow = currRow+1;nextCol = currCol;}//将当前行列改为下一行的行列,准备存储下一个数字currRow = nextRow;currCol = nextCol;}//打印9宫格数据for(int i=0;ivar n = prompt("请输入行数:","3");n = parseInt(n);//n必须为奇数if(n%2==0)n--;//n必须大于等于3if(n<3)n = 3;//创建数组-->类似双层集合,可像使用多维数组一样式样它//所有成员初始化为 0var ary = new Array();var aryLine;for(var i=0;i=n) {nextRow = currRow+1;nextCol = currCol;}//如果下一个数字的行索引小于0,就把其行索引变为 (5-1)else if(nextRow<0) {nextRow = n-1;}//如果下一个数字的列索引等于5,就把其列索引变为 (0)else if(nextCol>=n) {nextCol = 0;}//如果本应放下一个数字的位置已经有值的话,行索引变为 (当前数字的行索引+1),列索引变为 (当前数字的列索引)else if(ary[nextRow][nextCol]!=null) {nextRow = currRow+1;nextCol = currCol;}//将当前行列改为下一行的行列,准备存储下一个数字currRow = nextRow;currCol = nextCol;}document.write("

");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值