记得大一上 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("]");
}
}
}
分享到:
相关推荐
螺旋密封设计原理与最佳螺旋参数的探讨.rar
阿基米德螺旋天线螺旋天线小型化研究螺旋天线小型化研究
根据流量分析研究螺旋压榨型污泥脱水装置螺旋形线的设计方法,基于脱水参数推导出螺旋压榨机中等径变螺距螺旋轴形线的数学模型,推导出压缩比与参数的关系方程,实现了按脱水参数要求进行螺旋轴形线的参数化设计,为污泥...
为了明确螺旋分选机的应用现状及优化手段,整合了螺旋分选机在我国的应用情况,分析了煤用螺旋分选机在应用中存在的问题;概括了螺旋分选机设备的优化手段,提出了煤用螺旋分选机的优化方向。结果表明:相对于非煤用螺旋...
主要论述了有关文献对螺旋溜槽底板斜角确定时存在的问题,并用理论计算结果和国内已设计并成功投产运行的实例进行了证明,提出了解决问题的方法。
这项研究的目的是研究螺旋角对斜齿轮负载能力的影响,包括弯曲和接触负载能力。 在模拟过程中,相对于恒定压力角计算横向接触率。 通过改变螺旋角,可以计算和模拟重叠接触率和总接触率。 相对于螺旋角,计算并模拟...
运用UG建立了螺旋钻采煤机工作机构...分析结果表明:工作机构各部件未发生干涉,各构件运动平稳,且仿真结果与实际较为吻合,这为以后螺旋钻采煤机工作机构的设计奠定了良好基础,同时为工作机构钻具的纠偏问题提供了参考。
主要论述了有关文献对螺旋溜槽外螺旋角确定时存在的问题,特别提出用人为假设给料速度为依据而不是用理论计算数值而造成的一些计算错误,并用国内已设计并成功投产运行的实例经验,总结出了确定螺旋溜槽外螺旋角的方法...
在充分考虑矿用单体螺旋支柱的性能的基础上,介绍了矿用单体螺旋支柱的工作原理,并从实现过载保护发生器、星型摩擦离合器、初撑力产生装置、降柱机构、升柱操作机构的设计等方面入手,提出了相应的解决措施并研制出了...
本文利用曲线段三角基展开,伽略金法检验的矩量法对一种非频变天线——双臂圆锥对数螺旋天线进行了分析.通过曲线段拟合天线结构以及利用阻抗矩阵的中心对称性减少计算量.使得计数精度、速度大为提高.本文的方法和...
通过对宏顺石灰石山坡露天矿开采现状分析和对山坡露天矿建立螺旋运输坑线的应用技术研究,提出:螺旋运输坑线适合于自上而下形成单台阶等宽平台的山坡露天矿开采;对于孤立的山体高度大于50 m,山体倾角大于45°的山坡...
为了探索螺旋分选机主要结构参数对颗粒运动规律的影响,基于螺旋线的形成特性,利用微元的思想将颗粒在螺旋槽上复杂的受力进行简化,推导出集物料性质、螺旋分选机结构参数为一体的数学模型;以1.0~0.5 mm粒度级的不同...
螺旋滚筒式采煤机是煤炭开采中使用最为广泛的采煤设备,其中螺旋滚筒是...为提高采煤机螺旋滚筒的可靠性,对其修复工艺进行分析研究,同时制订了螺旋滚筒的大修工艺。经实际维修测试表明,该修复工艺可满足现场生产的要求。
介绍了螺旋输送机工作原理,分析了固体材料和螺旋输送机叶片的磨损机理,并采用三坐标测量仪对磨损后的螺旋输送机不同部位的叶片进行了测量,得出了螺旋输送机叶片的磨损规律,即:越靠外缘,螺旋叶片的厚度越薄,实际磨损...
针对煤矿井下瓦斯抽采用整体式宽翼片螺旋钻杆加工过程中上下料效率低、劳动强度大并存在一定的安全隐患等问题,设计了钻杆螺旋槽铣削加工自动上下料系统。结合生产现场原布局,综合考虑钻杆的特点、上下料空间、工作...
MATLAB,公式方法模拟螺旋波带片衍射光场,里面使用到的公式可参考文章,螺旋型波带片聚焦特性研究。
螺旋刷单打造爆款,是做好淘宝的必要手段,但是很多人由于操作技术和技巧的问题而没有太多效果,所以本系列课程从螺旋与打造爆款的各个方面总结,分析和探讨,提炼出了一套简单实用的操作方法。其实做好淘宝本质上...
为使肋骨钻杆在煤矿井下瓦斯抽排钻孔施工时达到最高的效率,在对肋骨钻杆的排渣机理进行分析研究的基础上,运用计算流体动力学(CFD)技术对钻杆螺旋叶片的结构参数进行数值模拟与优化。分析结果表明:φ98 mm的肋骨钻杆,...
金属螺旋弹簧动态特性研究,刘丽,张卫华,车辆悬挂参数(尤其是弹簧动刚度)与车辆的运行性能有着密切联系。为此以金属螺旋弹簧为例,利用有限元方法,研究弹簧的动态特性