记得大一上 c 语言的时候就碰到过这个问题 ,当时很菜 ,完全不会 ,今天没事上网看到这个似乎也成面试题了,就用各种方法个做了一遍 ,现在思路小case ,就是细节还搞了半天
题目 : 生成
[43, 44, 45, 46, 47, 48, 49, 50]
[42, 21, 22, 23, 24, 25, 26, 51]
[41, 20, 7, 8, 9, 10, 27, 52]
[40, 19, 6, 1, 2, 11, 28, 53]
[39, 18, 5, 4, 3, 12, 29, 54]
[38, 17, 16, 15, 14, 13, 30, 55]
[37, 36, 35, 34, 33, 32, 31, 56]
[64, 63, 62, 61, 60, 59, 58, 57]
螺旋矩阵,思路就是从内到外 ,一卷卷来喽
方法1:
从内到外 ,一卷卷来喽
方法2:
设数字1的位置 坐标为 [0,0] ,其实 每个位置 ,都可以单纯由 坐标 x,y 生成的
代码 如下 :
class Test {
//方法1 ,直接生成矩阵
private static int[][] spinGenerate(int level) {
int size = level * 2;
int[][] m = new int[size][size];
int cL = 1;
int startX = (size - 1) / 2;
int startY = (size - 1) / 2;
int count = 1;
for (cL = 1; cL <= level; cL++) {
int subSize = cL * 2 - 1;
//当前圈的各个边、
for (int i = 0; i < subSize - 1; i++) {
m[startX--][startY] = count++;
}
for (int i = 0; i < subSize; i++) {
m[startX][startY++] = count++;
}
for (int i = 0; i < subSize; i++) {
m[startX++][startY] = count++;
}
for (int i = 0; i < subSize + 1; i++) {
m[startX][startY--] = count++;
}
}
return m;
}
//方法 2:坐标 与 值 的函数
public static int getXy(int x, int y) {
if (x == 0 && y == 0) return 1;
int level = Math.max(Math.abs(x), Math.abs(y));
//解决不对称性
if (x < 0 && level == -x) level++;
else if (y < 0 && level == -y) level++;
int size = level * 2;
//左下角值
// int ldMax = ((level - 1) * 2 * 4 + 4 + 4) * level / 2;
int ldMax = (level * 2 * 4) * level / 2;
//四个圈线 分别判断
if (y == (level)) {
return ldMax - (size - 1) * 2 + (x - (1 - level));
}
if (y == (1 - level)) {
if (x == level) return ldMax;
return ldMax - (size - 1) * 3 - (x - (1 - level));
}
if (x == (level)) {
return ldMax - (y - (1 - level));
}
return ldMax - (size - 1) * 3 + (y - (1 - level));
}
public static void main(String[] args) {
int[][] base = spinGenerate(4);
for (int i = 0; i < base.length; i++) {
System.out.println(Arrays.toString(base[i]));
}
System.out.println();
System.out.println();
System.out.println();
for (int i = (1 - base.length) / 2; i <= base.length / 2; i++) {
System.out.print("[");
for (int j = (1 - base.length) / 2; j <= base.length / 2; j++) {
System.out.print(getXy(i, j) + ",");
}
System.out.println("]");
}
}
}
分享到:
相关推荐
本文将深入探讨螺旋密封的设计原理以及如何确定最佳的螺旋参数。 首先,螺旋密封的工作原理基于流体动力学。当轴旋转时,螺旋槽引导流体沿着轴向移动,形成压力差,从而阻止流体从轴和腔体之间的间隙泄漏。这种设计...
首先,从题目“螺旋溜槽底板斜角确定时存在问题的探讨”来看,文章的主要研究方向是针对螺旋溜槽底板斜角在确定过程中存在的问题进行探讨。这涉及到如何科学合理地选择或设计斜角,以避免实际应用中可能出现的物料...
本文主要探讨了螺旋溜槽外螺旋角确定过程中存在的问题,并基于已有工程实例提供了确定螺旋溜槽外螺旋角的改进方法。传统的确定螺旋溜槽外螺旋角的方法存在一定的误差,主要源于将给料速度人为设定为依据,而非基于...
在本主题中,我们将深入探讨如何使用COMSOL Multiphysics这一强大的仿真软件来创建和模拟阿基米德螺旋线。阿基米德螺旋是一种在数学和工程领域广泛应用的曲线,其特点是沿着螺旋线每移动一个固定距离,就会绕中心轴...
双螺旋分类是一种特殊的机器学习问题,它源于神经网络的研究,特别是多层感知机(Multilayer Perceptron, MLP)的学习过程。在这个问题中,数据分布成两个螺旋状,使得它们在二维空间中呈现出明显的非线性可分性。...
“沉默的螺旋”理论是由德国社会学家伊丽莎白•诺埃勒•诺依曼在20世纪80年代初提出的,主要探讨舆论的形成机制及其作用问题,尤其是人们在表达观点时的从众心理。该理论认为,个人在公共场合表达意见之前,会估计...
本文将深入探讨JBLADE软件的特性和应用,并结合其源代码,为有志于学习和研究螺旋桨设计的读者提供一个全面的指南。 JBLADE(Java-Based Blade Element Momentum Theory)软件是基于Java语言开发的,它利用了翼型...
本文档详细探讨了利用Robotics Toolbox和MATLAB环境对Motoman-up50工业机器人进行螺旋轨迹规划的研究。以下是针对文档中提到的知识点的深入分析: ### 工业机器人Motoman-up50模型建立 文中首先介绍了Motoman-up50...
本文将围绕“MIT螺旋桨设计程序”展开,深入探讨该程序的功能、设计原理以及如何利用它进行高效的设计工作。此外,我们还将提及与螺旋桨设计相关的其他工具,如CAESES、STARCCM+和ISIGHT优化,为读者提供一个全面的...
HFSS在天线设计和研究领域得到了广泛的应用,特别是在螺旋天线的仿真计算中,因其精度高、结果直观而成为重要的仿真工具。本文主要介绍了HFSS在螺旋天线仿真中的具体应用和操作步骤,以及仿真结果的分析。 首先,...
"UIUC螺旋桨库"是美国伊利诺伊大学厄巴纳-香槟分校(University of Illinois at Urbana-Champaign)开发的一个专业资源库,主要针对航空工程领域中的螺旋桨设计和研究。这个库包含了丰富的翼型数据,为工程师、研究...
螺旋桨叶型数控加工编程研究是一项复杂而精细的技术领域,主要关注于如何高效、精确地加工航空飞机发动机螺旋桨的叶型。螺旋桨作为船舶、汽轮机、压气机等机械装备的关键部件,其叶型的精度直接影响到整体动力装置的...
根据流量分析研究螺旋压榨型污泥脱水装置螺旋形线的设计方法,基于脱水参数推导出螺旋压榨机中等径变螺距螺旋轴形线的数学模型,推导出压缩比与参数的关系方程,实现了按脱水参数要求进行螺旋轴形线的参数化设计,为污泥...
《船用螺旋桨机器人铣削路径规划研究》一文主要探讨了在工业机器人进行船用螺旋桨铣削加工过程中如何有效地规划路径,解决干涉问题,提高加工精度和效率。螺旋桨作为船舶动力系统的关键部件,其复杂的几何形状和高...
星系螺旋结构理论是研究天文学中星系形态分类的一个重要领域,它主要关注星系呈现出螺旋状形态的成因、演化过程以及所遵循的物理规律。星系是宇宙中的巨大恒星系统,包含了数以亿计的恒星、行星、尘埃、气体和其他...
而本文作者采用了新的建模方法,从一个不同的角度对螺旋型螺旋线和螺旋弹簧的形成进行了研究,并建立了数学模型。在AutoCAD软件中使用“拉伸”功能,将圆截面沿螺旋线移动形成多股螺旋弹簧,为工程设计提供了一个...