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

题目:给定一个数字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('');
}

数字绕圈算法 JS 实现相关推荐

  1. 轨迹绕圈算法_基于三次B样条曲线拟合的智能车轨迹跟踪算法

    收稿日期:2017-10-30; 修回日期:2017-12-10; 录用日期:2017-12-19. 基金项目: 国家自然科学基金资助项目( 91420202,61372088) . 作者简介: 张永 ...

  2. leetcode202(Floyd判圈算法(龟兔赛跑算法))

    Write an algorithm to determine if a number is "happy". 写出一个算法确定一个数是不是快乐数. A happy number ...

  3. JavaScript实现使用二元运算符将两个数字相加fullAdder算法(附完整源码)

    JavaScript实现使用二元运算符将两个数字相加fullAdder算法(附完整源码) getBit.js完整源代码 fullAdder.js完整源代码 getBit.js完整源代码 export ...

  4. UVa 11549 Calculator Conundrum (训练指南,Floyd 判圈算法)

    算法竞赛训练指南, 42 页 注意: 1. 用数组来记录一个数的各位的数字 2. 快慢指针来记录链表环的入点(Floyd 判圈算法) #include <cstdio> #include ...

  5. 蓝桥ROS→f1tenth和PID绕圈←外传

    #勤写标兵挑战赛# 本节实现后,效果如下: 主要有3个点: 车体模型的简单配置 赛道环境的修改 算法参数的简要解释 ↓开启本节之前,需要完成↓: 一键配置←f1tenth和PID绕圈 (*Φ皿Φ*) ...

  6. c#一维数组按照给定的列行数量绕圈输出

    c#一维数组按照给定的列行数量绕圈输出 有一个排完序后的一维数组(1~100),需要按照给定的列行数量将其绕圈输出,比如给定5X5的列行,则输出结果如下: 给定6X5则输出如下(分隔线左边数字是一维数 ...

  7. Cesium|xt3d绕圈飞行

    Cesium|xt3d绕圈飞行 效果 代码 预览地址 效果 代码 <!DOCTYPE html> <html lang="zh-CN"><head&g ...

  8. 无人车仿真:带反馈的绕圈路径实现

    前期入门ros,无论是无人机还是无人车等的控制,基本都是先以仿真学习为主,成熟的仿真理解与功能实现,再搬到现实世界的无人车无人机就变得简单随意,也能减少许多不必要的硬件损坏.但是很多新手都面临过我曾面 ...

  9. 弗洛伊德龟兔赛跑算法(弗洛伊德判圈算法)

    弗洛伊德( 罗伯特・弗洛伊德)判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm),是一个可以在有限状 ...

最新文章

  1. ESX 3.5 与License Server不定时失去连接解决方法一例
  2. Anaconda 环境下 对Tushare进行测试
  3. springboot入门demo详解(解决跨域)
  4. js判断数组中对象是否存在某个值
  5. PowerBI 11月更新 数据PPT是否会引领新一轮革命
  6. ubuntu 安装PCL
  7. mysql与orancl_清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦
  8. IIS6.0应用程序池回收和工作进程【转:http://www.cnblogs.com/freshman0216/archive/2008/06/02/1212460.html】...
  9. Android json数据解析及简单例子
  10. 简单的php文件_简单的php文件上传(实例)
  11. 引用传递(Java)
  12. UVA10735 Euler Circuit题解
  13. node-webkit中使用sqlite3(MAC平台)
  14. cpu核心分配给不同进程linux,Linux技巧:多核下绑定硬件/进程到不同CPU
  15. 创建型模式 - 单例模式Singleton
  16. 便签 java_基于安卓Android的便签笔记APP设计(Android studio)
  17. matlab 将图片制作成视频并将视频输出为图片
  18. grid布局浏览器兼容_CSS Grid 网格布局教程
  19. Activiti实战. 1.2工作流基础
  20. Win7系统卸载McAfee杀毒软件

热门文章

  1. Redis 面试面面观
  2. 钢条切割算法python实现
  3. 国防科大计算机学院暑期学校,国防科技大学研究生暑期学校:夏季学期别样红...
  4. Elasticsearch7.9集群部署,head插件,canal同步mysql数据到es,亲自测试,无坑
  5. jQuery网格插件 ParamQuery
  6. 教育直播APP开发发展前景浅析!
  7. mysql workbench 报 tables could not be fetched.
  8. 99_包(package)
  9. Kudu 原理、API使用、代码
  10. Feburary——1438. 绝对差不超过限制的最长连续子数组(滑动窗口)