`

数字绕圈算法 JS 实现

 
阅读更多

这是一道某公司的算法题,我们姑且称之为“数字绕圈算法”。

题目:给定一个数字N,以此生成一个N^2的二维矩阵,以某个方向为基准从1开始填充数字。假设数字5那么开始绕圈,最终的结果显示为:

1       16      15     14     13

2       17      24     23     12

3       18      25     22     11

4       19      20     21     10

5         6        7       8       9

 

代码如下:

var num = 3, res; // 定义全局变量
document.getElementById('btn').onclick = function(){
	num = parseInt(document.getElementById('num').value) || num;
	res = [];
	for(var i =0;i<num; i++){
		res[i] = [];
		for(var v=0;v<num;v++)	res[i][v] = '';
	}
	calc(num);
	print();
}
//递归的算法
var calc = function(n, r){
	r = r || 0; // 圈数
	var x=y=0, // 初始化坐标
		start = r, // 开始位置
		end = n-1, // 结束位置
		startNum= !r ? 1 : n * 4 * r +1; //显示的数字
	// 奇数情况下判断是否是最后一个数字
	if (start==end){
		res[start][start] = Math.pow(num,2);
		return;
	}
	// 四个方向填充
	for(x=start; x<end; x++){
		res[x][r] = startNum++;
	}
	for(y=start; y<end; y++){
		res[x][y] = startNum++;
	}
	for(; x>r; x--){
		res[x][y] = startNum++;
	}
	for(; y>r; y--){
		res[x][y] = startNum++;
	}
	// 偶数情况下判断判断完结
	if ( x>Math.ceil(n/2)){
		return;
	}
	calc(--n, ++r);
}
//显示结果
var resDiv = document.getElementById('res');
var print = function(){
	var str = [];
	for(var i in res){
		for(var m in res[i]){
			str.push('<div>', res[i][m], '</div>');
		}
		str.push('<br/>');
	}
	resDiv.innerHTML = str.join('');
}

 

  • 大小: 5 KB
分享到:
评论

相关推荐

    spring-boot-2.3.6.RELEASE.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    scratch少儿编程逻辑思维游戏源码-糖果狩猎 多人游戏.zip

    scratch少儿编程逻辑思维游戏源码-糖果狩猎 多人游戏.zip

    spring-boot-1.1.12.RELEASE.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    scratch少儿编程逻辑思维游戏源码-小船.zip

    scratch少儿编程逻辑思维游戏源码-小船.zip

    【车间调度】基于遗传算法GA求解车间调度优化问题【含Matlab源码 13251期】.zip

    985研究生,Matlab领域优质创作者 (1)如需代码 加腾讯企鹅号,见评论区或私信; (2)代码运行版本 Matlab 2019b (3)其他仿真咨询 1 完整代码包运行+运行有问题可咨询 2 期刊或论文复现; 3 程序定制; 4 期刊写作或指导; 5 科研合作;

    spring-boot-1.4.4.RELEASE.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    spring-boot-1.4.4.RELEASE.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    Java超市管理系统样本.doc

    Java超市管理系统样本

    基于MATLAB的柔性车间调度系统设计与实现:遗传算法优化及甘特图生成

    内容概要:本文介绍了基于MATLAB的柔性车间调度系统的设计与实现。该系统旨在通过遗传算法优化车间调度,以最大化生产效率并最小化生产成本。系统不仅考虑了机器的柔性(即不同类型的机器具有不同的加工能力和成本),还实现了甘特图和收敛曲线的自动生成,便于分析和优化调度结果。主要内容包括:问题描述与需求分析、系统设计(算法选择、机器柔性设计)、系统实现(MATLAB源代码编写、柔性车间调度模型构建)以及实验与分析。 适合人群:从事制造行业、工业工程、自动化控制领域的研究人员和技术人员,尤其是对车间调度优化感兴趣的读者。 使用场景及目标:适用于需要优化生产调度的企业和研究机构,帮助他们提升生产效率、降低成本,并提供可视化的调度结果分析工具。 阅读建议:读者可以通过本文详细了解遗传算法在车间调度中的应用,掌握MATLAB编程技巧,学会利用甘特图和收敛曲线进行调度结果的分析和优化。

    GIS和旅游景点规划视域分析专题培训课件.ppt

    GIS和旅游景点规划视域分析专题培训课件.ppt

    spring-boot-1.4.5.RELEASE.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    NU1680低成本、无固件、高集成度无线充电电源接收器电路图和BOM

    BOM建议直接使用原理图,BOM只供参考 支持QI协议的无线充电接收端芯片 可编程的3.5-9V输出电压 5W BPP 无线功率接收 Rx 极简的电路设计解决方案:1 个线圈+1 片 NU1680 + 12 颗外围器件 无固件烧入,可节省研发和生产时间和资源 去除了同步整流桥上的自举电容,使成本更低 具备 I2C 功能,可通过它配置 FOD 等寄存器参数 小尺寸,16 脚 QFN 封装,3.0mm x 3.0mm,脚间距 0.5mm 原理图和BOM可点绑定资源下载,LC部分电容建议X7R。

    spring-boot-2.2.6.RELEASE.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    spring-boot-1.1.4.RELEASE.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    spring-data-redis-1.4.4.RELEASE.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    spring-boot-2.2.1.RELEASE.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    scratch少儿编程逻辑思维游戏源码-塔防 地精VS怪兽.zip

    scratch少儿编程逻辑思维游戏源码-塔防 地精VS怪兽.zip

    scratch少儿编程逻辑思维游戏源码-塔(3).zip

    scratch少儿编程逻辑思维游戏源码-塔(3).zip

    知识图谱可视化之cytoscape.js构建知识图谱项目源码

    项目主要介绍cytoscape.js的使用方法: 1)构建静态html文件进行图谱展示 2) 使用Python的django框架进行开发,并将后台业务逻辑生成的数据传送到前端js中进行展示,实现动态图谱构建,满足工程实际需要。 动态与静态图谱均整合至项目源码中,使用不同路由即可访问。 注:结合博客(https://blog.csdn.net/liaoningxinmin/article/details/105323281?spm=1001.2014.3001.5502)理解本项目更佳,运行项目前请看readme文件!

Global site tag (gtag.js) - Google Analytics