`

jenlp110 的 一道面试题

    博客分类:
  • java
阅读更多

转自:http://www.iteye.com/topic/545378

源于作者:jenlp110 的 一道面试题

文章分类:Java编程



一个画图程序 要求打印出 :

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 



解决方法一:
 
class snakePrint {   
    static int length = 7;   
    static int value = 1;   
    static int[][] snake = new int[length][length];   
    static Direction lastDirection = Direction.Right;   
  
    static enum Direction {   
        Right, Down, Left, Up;   
    }   
  
    public static void initialArray() {   
        int row = 0, line = 0;   
        for (int c = 0; c < length * length; c++) {   
            snake[row][line] = value;   
            lastDirection = findDirection(row, line);   
            switch (lastDirection) {   
                case Right:   
                    line++;   
                    break;   
                case Down:   
                    row++;   
                    break;   
                case Left:   
                    line--;   
                    break;   
                case Up:   
                    row--;   
                    break;   
                default:   
                    System.out.println("error");   
            }   
            value++;   
        }   
    }   
  
    static Direction findDirection(int row, int line) {   
        Direction direction = lastDirection;   
        switch (direction) {   
            case Right: {   
                if ((line == length - 1) || (snake[row][line + 1] != 0))   
                    direction = direction.Down;   
                break;   
            }   
            case Down: {   
                if ((row == length - 1) || (snake[row + 1][line] != 0))   
                    direction = direction.Left;   
                break;   
            }   
            case Left: {   
                if ((line == 0) || (snake[row][line - 1] != 0))   
                    direction = direction.Up;   
                break;   
            }   
            case Up: {   
                if (snake[row - 1][line] != 0)   
                    direction = direction.Right;   
                break;   
            }   
        }   
        return direction;   
    }   
  
    public static void main(String[] args) {   
        initialArray();   
  
        // display.....   
        for (int i = 0; i < length; i++) {   
            for (int j = 0; j < length; j++) {   
                System.out.print(snake[i][j] + "  ");   
            }   
            System.out.println();   
        }   
    }   
}  

解决方法二:
static void main(String args[]){   
      int N=5;   
      int a[][]=new int[N][N];   
      int i=0,j=0;   
      int count=1;   
      for(i=0;i<N;i++){   
          for(j=0;j<N;j++){   
              a[i][j]=0;   
          }   
      }   
      i=0;   
      j=0;   
      for(int k=0;k<=N/2;k++){   
          i=k;   
          j=k;   
          for(i=k;i<N-k;i++){   
              a[j][i]=count;   
              count++;   
          }   
          i=N-k-1;   
          for(j=k+1;j<N-k;j++){   
              a[j][i]=count;   
              count++;   
          }   
          j=N-k-1;   
          for(i=N-k-2;i>=k;i--){   
              a[j][i]=count;   
              count++;   
          }   
          i=k;   
          for(j=N-k-2;j>=1+k;j--){   
              a[j][i]=count;   
              count++;   
          }   
      }   
            
      for(i=0;i<N;i++){   
          for(j=0;j<N;j++){   
             System.out.print(a[i][j]+" ");   
          }   
          System.out.println();   
      }   
}


方法三:
<PRE class=java name="code">/*  
 *  
int baseNum=i  
  1         2               3           ...                   i  
 4i-4      (4i-4)+1         ...     (4i-4)+(i-2)              i+1  
 ...        ...             ...         ...                   i+2  
 ...   (4i-4)+[3(i-2)-2]    ...     (4i-4)+(i-2)+(i-2-1)      ...  
 3i-2       3i-3            ...         2i                    i+(i-1)  
 
 */  
  
  
  
/**  
 *  
 * @author   
 */  
public class PrintSnakeNumberSquare {   
    public static void printN(int baseNum){   
        System.out.println("int baseNum="+baseNum);   
        for(int i=0;i<baseNum;i++){   
            printN_M(baseNum,i,0);   
            System.out.println();   
        }   
    }   
    /**  
     * 打印baseNum宽度的第row行  
     * @param baseNum:打印正方形的边长  
     * @param row:打印正方形的第 row 行  
     * @param outNumber :这个正方形外面层数所占用的数字个数,最外面一层此值为0;  
     *                      长度为n的正方形占用4*n-4个数字,第i层递归需传入前i-1层所占数字总和。  
     */  
    public static void printN_M(int baseNum,int row,int outNumber){   
        if(row==0){//如果是第一行   
            for(int i=1;i<=baseNum;i++){   
                System.out.format("%3s",i+outNumber);   
            }   
            return ;   
        }   
        if(row==(baseNum-1)){//如果是最后一行   
            for(int i=(3*baseNum-2);i>=2*baseNum-1;i--){   
                System.out.format("%3s", i+outNumber);   
            }   
            return;   
        }   
        //row 如果不是第一行或者最后一行,则可以分为三部分   
        // 边长为baseNum正方形第row行的第一个数 ,边长为baseNum-2的第row-1行 ,边长为baseNum正方形的第row行的最后一个数   
        //print first number of the row   
        System.out.format("%3s",4*baseNum-3-row+outNumber);   
        //print middle part of the row by recursive print   
        int nextBaseNum=baseNum-2;   
        int nextRow=row-1;   
        if(nextBaseNum>0&&nextRow>=0){   
            printN_M(nextBaseNum,nextRow,outNumber+4*baseNum-4);   
        }   
        //print last number of the row   
        System.out.format("%3s",baseNum+row+outNumber);   
    }   
  
    public static void main(String[] args){   
  
        PrintSnakeNumberSquare.printN(3);   
        PrintSnakeNumberSquare.printN(4);   
        PrintSnakeNumberSquare.printN(5);   
        PrintSnakeNumberSquare.printN(7);   
  
    }   
}</PRE>   
    
<PRE class=java name="code">int baseNum=3  
  1  2  3  
  8  9  4  
  7  6  5  
int baseNum=4  
  1  2  3  4  
 12 13 14  5  
 11 16 15  6  
 10  9  8  7  
int baseNum=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 baseNum=7  
  1  2  3  4  5  6  7  
 24 25 26 27 28 29  8  
 23 40 41 42 43 30  9  
 22 39 48 49 44 31 10  
 21 38 47 46 45 32 11  
 20 37 36 35 34 33 12  
 19 18 17 16 15 14 13  
</PRE>   
 我写的解决方法:
import java.util.*;
public class MyPrint
{
	public static void main(String[] args)throws Exception{
		int lenght = 5 ;
		int initV = 1;
		if(args.length>=1){
		   lenght = Integer.parseInt(args[0]);
		}
		if(args.length>=2){
		   initV = Integer.parseInt(args[1]);
		}
		
		NumPrint m = new NumPrint();
		m.sort( lenght,initV);
	}
	
}

class NumPrint
{
	public static final int right = 0;
	public static final int down = 1;
	public static final int left = 2;
	public static final int up = 3;

	boolean islast = false;

	int[][] arr;

	public void sort(final int length, int initV){
		arr = new int[length][length];
		arr[0][0] = initV;
		int len = length;
		Map<String, Integer> map = fz(right, len-1, 0, 0, arr);
		len --;
		int ward = right;
		int cou=1;
		while(len>0){
			ward = (ward+1)%4;
			map = fz(ward, len, map.get("x"), map.get("y"),arr);
			if(cou++==2){
				len--;
				cou=1;
			}
		}

		print();
	}

	private Map<String, Integer> fz(int ward, int n, int x, int y, int[][] a){
		Map<String, Integer> map = new HashMap<String, Integer>();

		switch(ward){
			case right:
			while(n>0){
				a[x][++y] = a[x][y-1]+1;
				n--;
			}
			case down:
			while(n>0){
				a[++x][y] = a[x-1][y]+1;
				n--;
			}
			case left:
			while(n>0){
				a[x][--y] = a[x][y+1]+1;
				n--;
			}
			case up:
			while(n>0){
				a[--x][y] = a[x+1][y]+1;
				n--;
			}
		}

		map.put("x",x);
		map.put("y",y);
		return map;
	}

	private void print(){
		int length = arr.length;
		for(int i=0;i<length;i++){
			for(int j=0; j<length; j++){
				System.out.print(arr[i][j]+"\t");
			}
			System.out.println();
		}	
	}
}
 
分享到:
评论

相关推荐

    10万字总结java面试题和答案(八股文之一)Java面试题指南

    JavaOOP面试题 Java集合/泛型面试题 Java异常面试题 Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 Java注解面试题 多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 ...

    牛客大数据面试题集锦+答案,共523道,46W+字。大厂必备

    大数据面试题V3.0完成了。共523道题,679页,46w+字,来源于牛客870+篇面经。 主要分为以下几部分: Hadoop面试题:100道 Zookeeper面试题:21道 Hive面试题:47道 Flume面试题:11道 Kafka面试题:59到 HBase面试题...

    2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题

    2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题、Netty面试题、Elasticsearch面试题、Tomcat面试题、Dubbo面试题、Kafka面试题、Linux面试题、2021面试题、java面试...

    java面试题,J2EE面试题 笔试题

    最全的j2EE面试题,题量大、经典,是我面试的整理试题 1、java笔试题大集合 2、各个公司面试题 3、J2EE初学者面试题 4、J2EE面试题(打码查错题) 5、java_华为笔试题 6、java常见面试题 7、java程序员面试宝典 8、...

    个人面试题总结(java,数据库,前端).zip

    文件中包含了本人最近在网上总结的面试题,有java面试题,jq面试题,jsp、servlet、ajax面试题,mysql面试题,oracle面试题,redis教案,也有最近时间总结的公司面试题,涉及的层面虽然不是很多,但是应对面试 应该...

    2023最新JAVA面试题集

    2023年最新版--Java+最常见的+200++面试题汇总+答案总结汇总 阿里百度美团面试题合集 大数据面试题 100道 多线程面试59题(含答案) 最新JAVA面试题总结之基础/框架/数据库/JavaWeb/Redis BIO,NIO,AIO,Netty面试题 ...

    (完整版)运维面试题(含答案).pdf

    (完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题...

    Java面试题、JVM面试题、多线程面试题、并发编程、设计模式面试题、SpringBoot面试题、SpringCloud面试题、MyBatis面试题

    Java 集合、JVM、多线程、并发编程、设计模式、SpringBoot、SpringCloud、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、...React、JavaScript、Android 大数据、阿里巴巴等大厂面试题等、等技术栈...

    笔试面试题 一道面试题关于信息系统的问答和注意事项

    笔试面试题 一道面试题关于信息系统的问答和注意事项 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的...

    【BAT必备】zookeeper面试题

    【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....

    前端面试题:前端框架面试题大全

    前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; ...

    【BAT必备】dubbo面试题

    【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题...

    2020年前端面试真题(阿里、网易、滴滴等)文件为百度网盘链接永久有效

    现在五块钱的付出,将来收获的可能是一份心仪的offer,干货满满,建议下载。...友情提示:本套面试题包括面试题900题+公司实战面试题400问,面试题已经整理好答案,公司题由于新收录没有答案,但非常有参考价值。

    Python面试题及答案共70道.docx

    Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python...

    java高级软件工程师面试题大全及答案 含一些公司面试题

    java高级软件工程师面试题大全及答,一些公司的面试题,对于正在找工作应对面试的朋友或许有点帮助。java高级软件工程师面试题大全及答,一些公司的面试题,对于正在找工作应对面试的朋友或许有点帮助

    Java面试题、JVM面试题、多线程面试题、并发编程、设计模式面试题

    Java面试题、JVM面试题、多线程面试题、并发编程、设计模式面试题、SpringBoot面试题、SpringCloud面试题、MyBatis面试题、Mysql面试题、VUE面试题、算法面试题、运维面试题。 收集汇总各行业笔试or编程题解题思路 ...

    ERP工程师面试题ERP工程师面试题

    ERP工程师面试题ERP工程师面试题ERP工程师面试题ERP工程师面试题

    最全的IT公司面试题集 CHM版的

    Java面试题,J2EE面试题,.net面试题,PHP面试题,数据库面试题,英语面试,外企面试,软件测试面试题,Python面试题,Oracle面试题,MySql面试题,Web开发面试题,Unix面试题,程序员面试,网络技术面试题,网络安全面试题,Linux...

    模拟IC面试题analog面试题.doc

    模拟IC面试题 analog面试题.doc 在这个模拟IC面试题中,我们可以总结出以下几个重要的知识点: 1. Op-Amp 结构比较 在这个问题中,我们需要比较三种不同的 Op-Amp 结构:2-stage op-amp (active load, class-A ...

Global site tag (gtag.js) - Google Analytics