近幾天都在網絡上遊蕩,恰巧今天進入久違的Google的TopLanguage討論組,就翻了翻裡邊的帖子。看到這麼一篇:{面试}{技术}一道简单的二维数组面试题,内容大致是这样的:
年底了,轻松一下。http://www.javaeye.com/topic/545378?page=1
一个画图程序 要求打印出
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 9int 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<=25。
题目很简单,大一学生分分钟就能写出来。
语言不限,常规语言都行,C/C++/Java/C#/Ruby/Python/Perl。
代码简洁易懂为佳。(这里算是一个反例: http://www.javaeye.com/topic/557924 )
请各路高手各显神通,我会在第10楼贴出自己的C程序。
大致看了體目,用筆在紙上走了一遍程序實現的過程,看似簡單的問題,其實需要動一動腦筋才能做出來的。
花了一個多小時,用java實現了題目的要求(時間太長了),源代碼:
import java.lang.Math;
class practise {
public static void main(String[] arguments) {
for(int cycle = 5;cycle < 26;cycle++) {
int i,j;
int[][] matrix = new int[cycle][cycle];
int shangxian = cycle - 1;
matrix[0][0] = 1;
int kaishi,jieshu,jishu,flag;
jishu = 1;
for(int xunhuan = cycle - 1; xunhuan > 2; xunhuan--){
flag = Math.abs(xunhuan - shangxian);
kaishi = Math.abs(shangxian - xunhuan);
i = flag;
for ( j = kaishi; j < xunhuan + 1;j++){
matrix[i][j] = jishu;
jishu++;
}
jishu--;
j--;
for ( i = kaishi; i < xunhuan + 1;i++){
matrix[i][j] = jishu;
jishu++;
}
jishu--;
flag = Math.abs(flag - shangxian);
i = flag;
for ( j = flag ; j > kaishi;j--){
matrix[i][j] = jishu;
jishu++;
}
for ( i = flag; i > kaishi ;i--){
matrix[i][j] = jishu;
jishu++;
}
}
matrix[cycle/2][cycle/2] = cycle*cycle;
System.out.println("int = " + cycle);
for(i = 0; i < cycle; i++){
for(j = 0;j < cycle;j ++){
System.out.print(matrix[i][j] + " ");
}
System.out.print("\n");
}
System.out.println();
}
}
}
明天就是Heat Transfer的測驗了,時間挺緊。不過這程序真是不盡人意,變量的命名很混亂,而且沒有注解,估計哪天,連我自己都看不懂這份程序了:(
大致思路就是把矩陣的螺旋過程做成循環,5X5的矩陣,就走5次循環。而每次循環的具體實現過程,就在程序中了:)
加油Heat Transfer!