锁定老帖子 主题:从一道面试题想到的
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-30
供参考
public class Calc { public static void main(String[] args){ for(int i=1;i<8;i++){ calc(i); System.out.println("---------------------------" + "---------------------------"); } } public static void calc(int border){ //setup border here int end = border; int start = 1; int seq = 1; int[] c; int[] n = {start, start}; int[][] data = new int[end][end]; data[0][0] = seq++; do{ c = n; n = next(c, start, end); if(n[0] == start && n[1] == start){ start++; end--; n[0] = start; n[1] = start; if(start == end){ data[n[0]-1][n[1]-1] = seq++; break; }else if(start>end){ break; } } data[n[0]-1][n[1]-1] = seq++; }while(true); for(int i=0;i<data.length;i++){ for(int j=0;j<data[i].length;j++){ System.out.print(data[j][i] + "\t"); } System.out.print("\n"); } } private static int[] next(int[] current, int start, int end){ int x = current[0]; int y = current[1]; if(x == end && y != end){ y++; }else if(x > start && y == end){ x--; }else if(x == start && y > start){ y--; }else if(x < end && y == start){ x++; }else{ x = start; y = end; } return new int[]{x, y}; } } |
|
返回顶楼 | |
发表时间:2010-10-05
个人觉得,如果一样东西拿来当花瓶,可以考虑面向对象的思路,可以考虑包装,可以考虑美化.
但如果像数据库里的select,每天都要进行不计其数的操作,这些东西可以抛开了. 最高效,最有效的办法,才是上策. 而最高效,往往和巧妙的算法相关. 虽然这个题,偏第一种--花瓶,但我不支持楼主对算法的一些褒贬. 藐予小子,仅抒己见. |
|
返回顶楼 | |
发表时间:2010-10-05
我猜这种题目,不会是用这个来考OO的吧。而只是看能否用简洁的代码把这件事情写对写出来。主要是逻辑思维和心算。
|
|
返回顶楼 | |
发表时间:2010-10-06
看看同道的讨论 觉着很有意思 我也弄一个试试
思路很简单 把数据按照螺旋矩阵的路线装进数组 然后再打印出来 public class PrintSquare { private int[][] getArray(int n){ if(n>0){ int[][] array=new int[n][n]; int x=0; int y=0; int xStart=0; int xEnd=n-1; int yStart=0; int yEnd=n-1; for(int i=1;i<=n*n;i++){ array[y][x]=i; if(y==yStart&&x<xEnd){//横向前进 x++; if(x==xEnd){ yStart++; } } else if(y<yEnd&&x==xEnd){//纵向前进 y++; if(y==yEnd){ xEnd--; } } else if(y==yEnd&&x>xStart){//横向倒退 x--; if(x==xStart){ yEnd--; } } else if(y>yStart&&x==xStart){//纵向倒退 y--; if(y==yStart){ xStart++; } } } return array; } return null; } public void printSquare(int n){ if(n>0){ int[][] arr=getArray(n); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ System.out.print(arr[i][j]+"\t"); } System.out.println(); } } } public static void main(String[] args) { PrintSquare test=new PrintSquare(); test.printSquare(5); System.out.println(); test.printSquare(6); } } |
|
返回顶楼 | |