有名的面試題 有一個二維陣列(n*n)
阿新 • • 發佈:2019-02-06
有一個二維陣列(n*n),寫程式實現從右上角到左下角沿主對角線方向列印。
測試樣例:
給定一個二位陣列arr及題目中的引數n,請返回結果陣列。
[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]],4
返回:
測試樣例:
給定一個二位陣列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; }
結果:
這個題目沒看懂真的很坑人啊