`
mwei
  • 浏览: 123908 次
  • 性别: Icon_minigender_1
  • 来自: 抽象空间
社区版块
存档分类
最新评论

海螺式初始化二维数组

    博客分类:
  • java
阅读更多
原题见:http://www.iteye.com/topic/545378
真的不知道叫什么名字好,就自己给起个“海螺式”初始化二维数据。
说的是深圳一家公司的面试题,要求打印如下结果:
 int i=5;  
 1  2  3  4  5  
 16 17 18 19 6  
 15 24 25 20 7  
 14 23 22 21 8  
 13 12 11 10 9  
   
 int i=6  
 1  2  3  4  5   6  
 20 21 22 23 24  7  
 19 32 33 34 25  8  
 18 31 36 35 26  9  
 17 30 29 28 27 10  
 16 15 14 13 12 11 

看完题目,就没敢继续看下面的讨论,怕是别人给出答案,就自己想了想,写了起来。写完了,发现有的人的回答跟我的思路一致。不过用了不短的时间,若是真的笔试时,自己很难在规定的时间内完成(跑起来)。
思路就是根据数字的递增来初始化,使用四个标记right->down->left->up->right...循环下去。
/**
 * http://www.iteye.com/topic/545378?page=1
 */
public class PrintSnakeNumber {
	private int len;
	private int[][] snake;
	/**
	 * @param len > 1
	 */
	public void init(int len){
		if(len<2)
			this.len=2;
		this.len=len;		
		snake=calculate(this.len);
	}
	public int getLen(){
		return this.len;
	}
	private final int[][] calculate(int len){		
		int[][] snake=new int[len][len];
		int total=len*len;
		int i,j=0; //array'index
		int x=-1; //backup array's index
		int y=0; //backup array's index
		int value=1; //1...len^2, increased by one
		final String right="right"; //only i++
		final String down="down"; //only j++
		final String left="left"; //only i--
		final String up="up"; //only j--
		final String stop="stop";
		Map<String,Integer> map=new HashMap<String,Integer>();
		map.put("right", 0);
		map.put("down", 1);
		map.put("left", 2);
		map.put("up", 3);
		String pos=right; //first turn right
		while(!pos.equals(stop)){
			switch(map.get(pos)){
			case 0: //right
				i=x+1;
				j=y;
				for(;i<len;i++){
					if(snake[i][j]==0){
						x=i;
						y=j;
						snake[i][j]=value++;
					}else{
						if(value>total)
							pos=stop;
						else
							pos=down;
						break;
					}
				} //end for
			case 1: //down
				i=x;
				j=y+1;
				for(;j<len;j++){
					if(snake[i][j]==0){
						x=i;
						y=j;
						snake[i][j]=value++;
					}else{
						if(value>total)
							pos=stop;
						else
							pos=left;
						break;
					}
				} //end for
			case 2: //left
				i=x-1;
				j=y;
				for(;i>=0;i--){
					if(snake[i][j]==0){
						x=i;
						y=j;
						snake[i][j]=value++;
					}else{
						if(value>total)
							pos=stop;
						else
							pos=up;
						break;
					}
				}//end for
			case 3: //up
				i=x;
				j=y-1;
				for(;j>=0;j--){
					if(snake[i][j]==0){
						x=i;
						y=j;
						snake[i][j]=value++;
					}else{
						if(value>total)
							pos=stop;
						else
							pos=right;
						break;
					}
				}//end for
			} //end switch
		} //end while
		return snake;
	}
	
	public void printArray(){
		for(int i=0;i<this.len;i++){
			for(int j=0;j<this.len;j++)
				System.out.print(this.snake[j][i]+"\t");
			System.out.println();
		}
     }
}

测试结果:
public static void main(String[] args) {
		PrintSnakeNumber snake=new PrintSnakeNumber();
		snake.init(10);
		snake.printArray();
}
1	2	3	4	5	6	7	8	9	10	
36	37	38	39	40	41	42	43	44	11	
35	64	65	66	67	68	69	70	45	12	
34	63	84	85	86	87	88	71	46	13	
33	62	83	96	97	98	89	72	47	14	
32	61	82	95	100	99	90	73	48	15	
31	60	81	94	93	92	91	74	49	16	
30	59	80	79	78	77	76	75	50	17	
29	58	57	56	55	54	53	52	51	18	
28	27	26	25	24	23	22	21	20	19	

snake.init(2);时也输出了预期的结果。


分享到:
评论
2 楼 kidding87 2011-10-24  
看到了楼主的connet by用法,又看到这个很久以前的东西,感觉很有意思留个解法
        int [][] x=new int[n][n];
        int layer=0;
        if(n%2==0){
            layer=n/2;
        }else{
            layer=n/2+1;
            x[layer-1][layer-1]=n*n;
        }
        int t=1;
        for(int i=0;i<layer;i++){
            int px=i,py=i;
            for(;px<n-i-1;px++)  x[px][py]=t++;
            for(;py<n-i-1;py++)  x[px][py]=t++;
            for(;px>i;px--)  x[px][py]=t++;
            for(;py>i;py--)  x[px][py]=t++;
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                System.out.print(x[j][i]+"\t");
            }
            System.out.println();
        }
1 楼 shuishou119800 2009-12-16  
你好,我对你的calculate方法进行了一些改造,代码如下:
  private int[][] calculate(int len){
    int[][] helix=new int[len][len];
    int min=0,max=len-1;//行列的最大最小值
    int row=0,col=0;
    for(int i=0;i<len*len;i++){
      helix[row][col]=i+1;
      if(row==min&&col<max){
        col++;
        }else if(row<max&&col==max){
        row++;
        }else if(row==max&&col>min){
        col--;
        }else if(row>min&&col==min){
        row--;
      }
      if(row-1==min&&col==min){ //在一个周期结束时修改最大最小值
        min++;
        max--;
      }
    }
    return helix;
  }

我在blog(http://shuishou119800.iteye.com/blog/549592)中对这个算法写了些分析,希望能一起探讨

相关推荐

    用MATLAB实现三维模拟海螺模型.pdf

    MATLAB是MathWorks公司推出的用于数值计算、可视化以及编程的高级语言和交互式环境,广泛应用于工程、科学以及数学等领域。在此文中,作者展示了MATLAB的三维图形处理能力,通过编写代码模拟海螺的生长过程。 三维...

    苹果CMS V10响应式影视网站模板海螺v6.0.1主题模板 免授权版

    海螺模板的设计注重响应式布局,这意味着无论用户使用何种设备——桌面电脑、平板还是手机,都能提供一致且良好的浏览体验。模板的布局会根据屏幕大小自动调整,确保内容在不同设备上都能清晰呈现。此外,该模板还...

    海螺模板V16魔改版2.0_海螺模板v4.0_苹果cms_

    海螺模板是一款专门为苹果CMS...无论是魔改版的V16还是标准的v4.0,都强调了用户体验和管理灵活性,而"海螺主题设置"确保了定制化的可能性。通过深入理解和充分利用这些资源,用户可以创建出独具特色的在线视频平台。

    苹果cmsV10海螺模板

    2. **响应式设计**:考虑到用户可能使用不同设备访问网站,海螺模板一般会具备响应式特性,确保在手机、平板电脑和桌面电脑上都能提供良好的浏览体验。 3. **功能集成**:作为苹果CMS V10的模板,海螺模板可能会...

    苹果CMS V10响应式影视网站模板海螺v6.0.1主题模板

    7. **自定义性强**:主题提供了丰富的自定义选项,允许管理员根据需求调整布局、颜色、字体等,打造个性化的影视网站。 8. **兼容性**:与苹果CMS V10系统无缝集成,确保所有功能正常运作,并可能支持未来的系统...

    苹果cms10+海螺模板m3.1全解密无后门版

    1. **响应式设计**:海螺模板M3.1采用响应式布局,能适应不同设备的屏幕尺寸,提供良好的移动端浏览体验。 2. **界面美化**:模板设计风格独特,色彩搭配合理,图标和按钮设计美观,提升了用户的视觉感受。 3. **...

    苹果cms10 海螺模板 资源提供

    6. **模板系统**:支持自定义模板,海螺模板作为其中的一员,具有独特的设计风格和布局,能为网站增添个性化的视觉效果。 海螺模板的特点: 1. **视觉设计**:海螺模板以其清新、简洁的界面设计,为用户提供舒适的...

    海螺主题模板加安装教程

    接下来,在浏览器中访问安装地址,按照提示输入数据库信息,完成初始设置。最后,登录后台进行基本配置,如网站名称、管理员账号等。 数据采集教程主要涉及如何获取和导入影视资源。苹果CMS通常支持自动采集功能,...

    海螺创业:二零一九年年报.PDF

    【海螺创业2019年报】是中国海螺创业控股有限公司发布的年度财务报告,涵盖了公司在2019年的运营情况、财务数据、业绩回顾、管理分析、企业治理等多个方面的重要信息。以下是报告中的主要知识点: 1. **公司信息**...

    苹果cmsV10海螺主题1.zip

    "007maccms_v1.0"可能是海螺主题的特定版本,代表着该主题的初始发布或者更新。这个文件名暗示着主题可能包含了针对苹果CMS的特别优化,比如与"007"电影系列相关的主题元素或功能。 在安装使用苹果CMS V10海螺主题...

    神器海螺网址快速直达

    5. **响应式设计**:为了适应不同设备和屏幕尺寸,"神器海螺"可能应用了响应式布局,这可能涉及到媒体查询、Flexbox或Grid布局技术。 6. **性能优化**:JavaScript开发中,性能优化是一个重要环节。项目可能使用了...

    苹果cms最新海螺模板魔改版16.2

    海螺模板一直是苹果cms比较好看的模板。苹果CMS就是影视解析的PHP源码,站长朋友可以拿去搭建一个影视站引流,效果不错哦!目前网络上有很多,这个是无错最新版本!已去授权 主题设置后台 – 安装PHP扩展 切记一定...

    苹果cms最新海螺模板全修复版_2020苹果cms试看_hlstem_海螺模板_苹果cms最新海螺模板全修复版_苹果cms模板_

    主题设置后台– 安装PHP扩展– 后台快捷菜单配置添加– 海螺主题设置/admin.php/admin/conch/theme海螺模板完美修复版2020.01.04带模板独立后台管理系统的多功能模板。使用此模板务必安装sg11插件,php版本7.0~7.2。...

    海螺模块免授权.zip

    海螺模块是针对苹果CMS内容管理系统(AppleCMS)设计的一款模板,主要为用户提供自定义网站外观和用户体验的功能。苹果CMS是一款流行的PHP建站系统,它提供了丰富的功能和易用的后台管理界面,使得非专业程序员也能...

    数学海螺图勾股定理应用PPT课件.pptx

    在后续部分,课件通过“数学海螺图”展示了如何利用勾股定理画出不同长度的线段,例如13、15、17这样的勾股数组。这种构造方法有助于学生理解勾股定理的几何意义,并能培养他们的实践操作能力。 课件还涉及了实际...

    基于PHP的影视网站源码 苹果CMS V10海螺模板主题下载.zip

    10. **database.sql**:数据库结构和初始数据的SQL脚本,用于初始化数据库。 11. **.htaccess**:Apache服务器的重写规则文件,用于URL美化和隐藏PHP扩展名。 12. **README**或**INSTALL**文件:提供安装和配置指南...

    沙滩海螺ppt模板下载

    【沙滩海螺PPT模板】是一款专为旅游休闲主题设计的演示文稿模板,它将带你进入一个充满海洋风情的世界,让观众仿佛置身于阳光、沙滩与海螺之间,为你的演讲增添独特的视觉效果和感染力。这款模板适用于制作关于海滩...

    海螺模板v4.0修复版.zip

    顶部导航自定义分类内容页显示二级菜单修复 后台加入更新版本显示 海螺模板修复版2020.02.27 带模板独立后台管理系统的多功能模板。 使用此模板务必安装sg11插件,php版本7.0~7.2。 2020年2月27日 优化SEO设置...

    苹果CMS海螺V16魔改版.zip

    "苹果CMS海螺V16魔改版"可能是指对原版海螺模板V16进行了一系列个性化或增强性的修改,以适应特定用户需求或提高网站性能。 海螺模板以其海洋元素的设计风格,提供了一种清新、直观的用户体验。它可能包括自定义的...

    海螺码头水域流速分布模式研究

    在实际研究中,通过对长江口海螺码头水域的潮流速资料进行详细分析,可以绘制流速过程线及流速剖面图,从而直观地表现出水流的三维流态。通过比较不同流速分布模式下的计算结果,可以筛选出最适合描述该水域流速分布...

Global site tag (gtag.js) - Google Analytics