例:
1 2 3
4 5 6
7 8 9
输出为如下结果
1;4;7;8;9;6;3;2;5;
当时方正笔试题出得有些让人摸不到头脑,全英文,与开发无太多关系,感觉不是在面试软件工程师职位,倒像是招聘翻译。心中已有些不爽,后来一个个去面试,还是没问技术,反而问我为什么离职,唉......
最后出了上面的上机题,因为心里不爽,我想了一会儿就去找招聘主管,说了我对这道题的想法,然后要求走人,那主管挽留说要我把程序写完,当时强烈感觉不爽,强烈要求走人,后批准,事终。
当时对这道题不解,为什么非要考这种题那,一直以为方正是做XXX系统的,后来才知道方正主要是搞排版,对矩阵运算是有要求的,年轻啊,沉不住气^o^。
附:当时认为是要找一个规律,找到一维数组和二维数组的映射,然后循环一维数组,根据一维数组的索引直接推断出二维数组的索引并输出。
昨天找了张纸,画了半天都没找到两者之间的关系,发此文的重要目的是找到一种更好的算法,请大家一起来解决。
以下是我想到的算法,献丑了。感觉太Ugly了,期待各位大牛的算法:)
1
using
System;
2
3 namespace Landpy
4 {
5 /// <summary>
6 /// Description: print a spiral matrix as n×n
7 /// 1 2 3
8 /// 4 5 6 => 1;4;7;8;9;6;3;2;5
9 /// 7 8 9
10 /// Author: Landpy_pangxiaoliang
11 /// Date: 2009-07-24
12 /// From: http;//www.cnblogs.com/pangxiaoliang
13 /// </summary>
14 class FangZhengExam
15 {
16 static void Main()
17 {
18 Console.WriteLine( " Please input a range! " );
19
20 int range = 0 ;
21 if (Int32.TryParse(Console.ReadLine(), out range))
22 {
23 // Init a originated array
24 int [,] printArray = InitPrintArray(range);
25 // Output a originated array
26 OutPrintArray(printArray);
27 Console.WriteLine( " ------------------------------------------- " );
28 // Output new sort array
29 OutputSortArray(printArray);
30 Console.WriteLine( " ------------------------------------------- " );
31 Console.WriteLine( " Finish " );
32 }
33 else
34 {
35 Console.WriteLine( " Erro range! " );
36 }
37
38 }
39
40 private static int [,] InitPrintArray( int range)
41 {
42 int [,] printArray = new int [range, range];
43 int tmpValue = 0 ;
44 for ( int y = 0 ; y < range; y ++ )
45 {
46 for ( int x = 0 ; x < range; x ++ )
47 {
48 tmpValue ++ ;
49 printArray[x, y] = tmpValue;
50 }
51 }
52 return printArray;
53 }
54
55 private static void OutPrintArray( int [,] printArray)
56 {
57 int range = printArray.GetUpperBound( 0 );
58
59 for ( int y = 0 ; y < range + 1 ; y ++ )
60 {
61 for ( int x = 0 ; x < range + 1 ; x ++ )
62 {
63 Console.Write(printArray[x, y].ToString().PadLeft( 3 , ' ' ));
64 if (x != range)
65 {
66 Console.Write( " | " );
67 }
68 }
69 Console.WriteLine();
70 }
71 }
72
73 private static void OutputSortArray( int [,] printArray)
74 {
75 int range = printArray.GetUpperBound( 0 );
76 bool flag = true ;
77 int x = 0 , y = - 1 ;
78 for ( int i = range + 1 ; i > 0 ; i -- )
79 {
80 for ( int tmp = 0 ; tmp < i; tmp ++ )
81 {
82 if (flag)
83 {
84 y ++ ;
85 }
86 else
87 {
88 y -- ;
89 }
90 Console.Write(printArray[x, y].ToString() + " ; " );
91 }
92 for ( int tmp = 0 ; tmp < i - 1 ; tmp ++ )
93 {
94 if (flag)
95 {
96 x ++ ;
97 }
98 else
99 {
100 x -- ;
101 }
102 Console.Write(printArray[x, y].ToString() + " ; " );
103 }
104 flag = ! flag;
105 }
106 }
107 }
108 }
放在首页得瑟一下,为的是求到更好算法,请大家猛烈拍砖!
2
3 namespace Landpy
4 {
5 /// <summary>
6 /// Description: print a spiral matrix as n×n
7 /// 1 2 3
8 /// 4 5 6 => 1;4;7;8;9;6;3;2;5
9 /// 7 8 9
10 /// Author: Landpy_pangxiaoliang
11 /// Date: 2009-07-24
12 /// From: http;//www.cnblogs.com/pangxiaoliang
13 /// </summary>
14 class FangZhengExam
15 {
16 static void Main()
17 {
18 Console.WriteLine( " Please input a range! " );
19
20 int range = 0 ;
21 if (Int32.TryParse(Console.ReadLine(), out range))
22 {
23 // Init a originated array
24 int [,] printArray = InitPrintArray(range);
25 // Output a originated array
26 OutPrintArray(printArray);
27 Console.WriteLine( " ------------------------------------------- " );
28 // Output new sort array
29 OutputSortArray(printArray);
30 Console.WriteLine( " ------------------------------------------- " );
31 Console.WriteLine( " Finish " );
32 }
33 else
34 {
35 Console.WriteLine( " Erro range! " );
36 }
37
38 }
39
40 private static int [,] InitPrintArray( int range)
41 {
42 int [,] printArray = new int [range, range];
43 int tmpValue = 0 ;
44 for ( int y = 0 ; y < range; y ++ )
45 {
46 for ( int x = 0 ; x < range; x ++ )
47 {
48 tmpValue ++ ;
49 printArray[x, y] = tmpValue;
50 }
51 }
52 return printArray;
53 }
54
55 private static void OutPrintArray( int [,] printArray)
56 {
57 int range = printArray.GetUpperBound( 0 );
58
59 for ( int y = 0 ; y < range + 1 ; y ++ )
60 {
61 for ( int x = 0 ; x < range + 1 ; x ++ )
62 {
63 Console.Write(printArray[x, y].ToString().PadLeft( 3 , ' ' ));
64 if (x != range)
65 {
66 Console.Write( " | " );
67 }
68 }
69 Console.WriteLine();
70 }
71 }
72
73 private static void OutputSortArray( int [,] printArray)
74 {
75 int range = printArray.GetUpperBound( 0 );
76 bool flag = true ;
77 int x = 0 , y = - 1 ;
78 for ( int i = range + 1 ; i > 0 ; i -- )
79 {
80 for ( int tmp = 0 ; tmp < i; tmp ++ )
81 {
82 if (flag)
83 {
84 y ++ ;
85 }
86 else
87 {
88 y -- ;
89 }
90 Console.Write(printArray[x, y].ToString() + " ; " );
91 }
92 for ( int tmp = 0 ; tmp < i - 1 ; tmp ++ )
93 {
94 if (flag)
95 {
96 x ++ ;
97 }
98 else
99 {
100 x -- ;
101 }
102 Console.Write(printArray[x, y].ToString() + " ; " );
103 }
104 flag = ! flag;
105 }
106 }
107 }
108 }