面試例題:輸入n,求一個nXn矩陣,規定矩陣沿45度遞增,造成一個zigzag數組(JPEG編碼裏取像素數據的排列順序),請問如何用C++實現?ios
(中國臺灣著名硬件公司2007年11月面試題)(自程序員面試寶典第二版p89)程序員
程序實現以下:面試
分析:例如輸入爲8的時候獲得的zigzag數組爲:數組
#include <iostream> #include <stdio.h> using namespace std; int main() { int N; int s, i, j; int squa; scanf("%d", &N); int **a = (int **)malloc(N * sizeof(int)); if(NULL == a) { return 0; } //空間分配 for(i = 0; i < N; i++) { if(NULL == (a[i] = (int*)malloc(N * sizeof(int)))) { while(--i >= 0) { free(a[i]); } free(a); return 1; } } squa = N * N; //求對應位置上應填寫的值 for(i = 0; i < N; i++) { for(j = 0; j < N; j++) { s = i + j; if(s < N)//上三角 { s = i + j;//爲了看的更清楚,這裏加了這條與下面對稱的語句 a[i][j] = s * (s + 1) / 2 + ((0 == (i + j) % 2) ? i : j); } else//下三角 { s = (N - 1 - i) + (N - 1 - j); a[i][j] = squa - s * (s + 1) / 2 - (N - ((0 == (i + j) % 2) ? i : j)); } } } //打印輸出 for(i = 0; i < N; i ++) { for(j = 0; j < N; j++) { printf("%6d", a[i][j]); } printf("\n"); } return 0; }