论坛首页 招聘求职论坛

深圳一家公司面试问题,很囧

浏览 78228 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-08-20  
不错,学习一下
0 请登录后投票
   发表时间:2010-08-23  
SIZE = 5
# 给出任意点坐标,计算该点值
def calc(i, j):
    square = min(i, SIZE-1-i, j, SIZE-1-j) # 第几圈,0起始
    
    # 计算边长和起始值
    side = SIZE # 边长,最小为1
    firstval = 1 # 起始值
    for k in range(square):
        firstval += (side-1) * 4
        side -= 2

    point = square # 圈圈左上角坐标
    if i == point: # 上
        val = firstval + (j-point)
    elif j == point: # 左
        val = firstval + (side-1)*4 - (i-point)
    else:
        
        firstval = firstval + (side-1)*2 # 圈圈右下角值
        point = SIZE - 1 - square  # 圈圈右下角坐标
        
        if i == point: # 下
            val = firstval + (point-j)
        else: # 右
            val = firstval - (point-i)
    
    return val

def main():
    for i in range(SIZE):
        for j in range(SIZE):
            print '%3d' % calc(i, j),
        print

main()
0 请登录后投票
   发表时间:2010-08-27  
算可以算的,考数学。
写程序转圈圈也可以。
	public static int[][] p(int i){
		int[][] ds = {{1,0},{0,1},{-1,0},{0,-1}};
		int[][] as = new int[i][i];
		int d=0;
		
		int x=0, y=0;
		for(int m=1;m<=i*i;m++){
			as[x][y] = m;
			int xx = x+ds[d][0];
			int yy = y+ds[d][1];
			if (xx<0 || xx==i || yy<0 || yy==i || as[xx][yy]!=0){
				d=(d+1)%4;
			}
			x+=ds[d][0];
			y+=ds[d][1];
		}
		
		for(y=0;y<as.length;y++){
			for(x=0;x<as.length;x++){
				System.out.print(String.format("%02d", as[x][y]) +" ");
			}
			System.out.println();
		}
		return as;
	}

0 请登录后投票
   发表时间:2010-08-29  
1.int i=5;  
2.1  2  3  4  5 
3.16 17 18 19 6 
4.15 24 25 20 7 
5.14 23 22 21 8 
6.13 12 11 10 9 
7. 
8.int i=6 
9.1  2  3  4  5   6 
10.20 21 22 23 24  7 
11.19 32 33 34 25  8 
12.18 31 36 35 26  9 
13.17 30 29 28 27 10 
14.16 15 14 13 12 11 
0 请登录后投票
   发表时间:2010-08-31  
我画圈画的,
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

i= 9
1 2 3 4 5 6 7 8 9
32 33 34 35 36 37 38 39 10
31 56 57 58 59 60 61 40 11
30 55 72 73 74 75 62 41 12
29 54 71 80 81 76 63 42 13
28 53 70 79 78 77 64 43 14
27 52 69 68 67 66 65 44 15
26 51 50 49 48 47 46 45 16
25 24 23 22 21 20 19 18 17
0 请登录后投票
   发表时间:2010-09-07   最后修改:2010-09-07
我也贡献一个方法:这个问题的关键是一个如何实现碰壁就转弯的函数,这个函数应该是这样一个集合(1,0,-1,0),实现这个集合的函数很多,我用的是sin函数
public class mathsnake {
	static int L=8;
	static int start=1;
	static int snake[][]=new int[L][L];
	static int x=0,y=0;
	public static void main (String[] arg){
		double a=Math.PI;
		int m=0;
		for(int i=1;i<=L*L;i++){
			snake[x][y]=i;
			x=x+(int)Math.sin(m*a/2);
			y=y+(int)Math.cos(m*a/2);
			if(x==y||x+y==L-1){
				m=m+1;
				if(m>3){m=m-4;x++;y++;}
			}
		}
		 for (int i = 0; i < L; i++) {   
	            for (int j = 0; j < L; j++) {   
	                System.out.print(snake[i][j] + "  ");   
	            }   
	            System.out.println();   
	        }	
	}

}

借这个回复,问大家个问题:28岁老男人,无计算机基础,以java起步,以后想做IT民工,有希望吗?
0 请登录后投票
   发表时间:2010-09-16  

public class LoopPrinter {

	/**
	 * 获得一个存储回圈数的二维数组
	 * 
	 * @param row
	 *            行数
	 * @param col
	 *            列数
	 * @return
	 */
	public static int[][] loopArray(final int row, final int col) {
		int[][] array = new int[row][col];
		int maxCount = row * col;
		int count = 1;
		int less = row < col ? row : col;
		int loopLimit = less / 2; // 最大圈数
		if (less % 2 > 0) {
			if (row == col) {
				array[loopLimit][loopLimit] = maxCount;
			}
			loopLimit++;
		}

		for (int loop = 1, i = 0, j = 0; loop <= loopLimit; loop++, i++, j++) {
			for (; j < col - loop; j++) {
				array[i][j] = count++;
			}
			for (; i < row - loop; i++) {
				array[i][j] = count++;
			}
			for (; j > loop - 1 && count <= maxCount; j--) {
				array[i][j] = count++;
			}
			for (; i > loop - 1 && count <= maxCount; i--) {
				array[i][j] = count++;
			}
		}

		return array;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int row = 6;
		int col = 5;
		long nano = System.nanoTime();
		int[][] array = loopArray(row, col);
		System.out.println("用时:" + (System.nanoTime() - nano) + " ns");

		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array[i].length; j++) {
				System.out.print(array[i][j] + "\t");
			}
			System.out.println();
		}
	}

}
 
0 请登录后投票
   发表时间:2010-10-12   最后修改:2010-10-12
贴一下我的算法,也是一层一层的循环。
public static void main(String[] args) {
		int s = 8;
		int data[][] = new int[s][s];
		int d = 1;
		int layer = 0;
		if (s % 2 == 1) {
			data[s / 2][s / 2] = s * s;
		}
		
		while (d < s * s) {
			for (int i = layer; i < s - 1- layer; i++) {
				data[layer][i] = d++;
			}
			for (int i = layer; i < s - 1- layer; i++) {
				data[i][s - 1 - layer] = d++;
			}
			for (int i = s - 1- layer; i > layer ; i--) {
				data[s - 1 - layer][i] = d++;
			}
			for (int i = s - 1- layer; i > layer ; i--) {
				data[i][layer] = d++;
			}
			layer++;
		}

		for (int i = 0; i < s; i++) {
			for (int j = 0; j < s; j++) {
				System.out.print("\t" + data[i][j]);
			}
			System.out.println();
		}
	}
0 请登录后投票
   发表时间:2010-10-28  
晕了。。。。。
0 请登录后投票
   发表时间:2010-10-29  
这个叫螺旋矩阵,以前学c语言算法时学过。转一个别人写的程序:

运行结果:
please input a number between 1 to 99
10
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   10099   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
Press any key to continue

程序清单
#include <stdio.h>

int n;
int count=1;
int a[100][100]={0};

void eva(int x)
{
         register         int      i=x;
         register         int      j=x;
         if(2*x>n)
                 a[i][j]=count++;
         else
         {
                 for(;j<=n-x;j++)
                         a[i][j]=count++;
                 for(;i<=n-x;i++)
                         a[i][j]=count++;
                 for(;j>x;j--)
                         a[i][j]=count++;
                 for(;i>x;i--)
                         a[i][j]=count++;
         }
}

int main(void)
{
         int         y=1;
         register         int      i;
         register         int      j;
         printf("please input a number between 1 to 99\n");
         while(scanf("%d",&n),n>99 || n<1);
         while(y<=n/2+n%2)
                 eva(y++);
         for(i=1;i<=n;i++)
         {
                 for(j=1;j<=n;j++)
                         printf("%-4d",a[i][j]);
                 putchar('\n');
         }
         return 0;
}
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics