一道面试题

fuyun 2011-08-12
    给定一组数字,要求:
    1、先进行升序排序;
    2、给定n,对排序后的数字进行矩阵逆时针输出:其中,若数字项数大于n×n,则截取前n×n个,小于n×n则补零。
    3、4×4格式的一个可能的输出例子:
        1 12 11 10
        2 13 16  9
        3 14 15  8
        4  5   6   7
xuedong 2011-08-16
感觉是排好序后,再定义个一二维数组,然后给二维数组赋值,最后把二维数组打印即可
zouershun 2011-08-17
定义个一二维数组,写个方法以四边形为单位处理数据,方法的2个参数(1,n),(2,n-1)...以此类推就可以了
zx246212 2012-05-24
public class test {
public static void main(String[] args) throws IOException {
int n = 4;
Integer[][] num = new Integer[n][n];
Integer[] demo = {1,2,3,16,5,6,7,8,9,10,11,12,13,14,15,4};
for(int i=0;i<demo.length;i++){
for(int j=i;j<demo.length;j++){
if(demo[i]>demo[j]){
int temp = demo[i];
demo[i] = demo[j];
demo[j] = temp;
}
}
}
int xmax = n-1;
int ymax = n-1;
int xmin = 0;
int ymin = 0;

int i = 0;

while(i<n*n){
for(int a=xmin;a<=xmax;a++){
num[a][ymin] = demo[i];
i++;
}
for(int a=ymin+1;a<=ymax;a++){
num[xmax][a] = demo[i];
i++;
}
for(int a=xmax-1;a>=xmin;a--){
num[a][ymax] = demo[i];
i++;
}
for(int a=ymax-1;a>=ymin+1;a--){
num[xmin][a] = demo[i];
i++;
}
xmin+=1;
xmax-=1;
ymin+=1;
ymax-=1;
}
for(int ii=0;ii<n;ii++){
System.out.println();
for(int j=0;j<n;j++){
System.out.print(num[ii][j]+"  ");
}
}

}
}
Global site tag (gtag.js) - Google Analytics