1. 程式人生 > >有名的面試題 有一個二維陣列(n*n)

有名的面試題 有一個二維陣列(n*n)

有一個二維陣列(n*n),寫程式實現從右上角到左下角沿主對角線方向列印。

測試樣例:
給定一個二位陣列arr及題目中的引數n,請返回結果陣列。
[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]],4

返回:

[4,3,8,2,7,12,1,6,11,16,5,10,15,9,14,13]

思路
首先以矩形的方式打印出這個二維陣列,然後觀察其中的規律。
開始我還以為是列印從右上角到左下角這條斜線上所有的數字。看了給予的返回結果那麼多數字後我懵逼了。
原來是列印反斜線所穿越過的數字。

實現

程式碼

#include <stdio.h>
#include <stdlib.h>

#define COLUME 4

void arrayPrint(int arr[COLUME][COLUME], int n)
{
    int tmp = n ;
    int i, j;

    while(tmp-- > 0){
        j = tmp, i = 0;
        while(j < n){
            printf("%d ", arr[i++][j++]);
        }
    }
    ++tmp;
    while(++tmp < n){
        i = tmp, j = 0;
        while(i < n){
            printf("%d ", arr[i++][j++]);
        }
    }
}

int main()
{
    int arr[COLUME][COLUME] = {
        {1,2,3,4},
        {5,6,7,8},
        {9,10,11,12},
        {13,14,15,16}
    };

    arrayPrint(arr,COLUME);

    return 0;
}


結果:


這個題目沒看懂真的很坑人啊