输出N×N的zigzag数组 算法思想 代码如下
/* 0 1 5 6 14 15 27 28 2 4 7 13 16 26 29 42 3 8 12 17 25 30 41 43 9 11 18 24 31 40 44 53 10 19 23 32 39 45 52 54 20 22 33 38 46 51 55 60 21 34 37 47 50 56 59 61 35 36 48 49 57 58 62 63*/#include <iostream>using namespace std;int main(){int N;int s,i,j;int squa;cin>>N;int **a = (int **) malloc(N*sizeof(int));if(a == NULL) return 0;for(i=0;i<N;i++){ if((a[i] = (int *)malloc(N*sizeof(int)))==NULL) { while(--i>=0) free(a[i]); free(a); return 0; }}squa = N*N;for(i=0;i<N;i++) for(j=0;j<N;j++) { s = i+j; if(s<N) a[i][j] = s*(s+1)/2 + (((i+j)%2 == 0)?i:j); //基于什么样的思想,说明一下 else { s = (N-1-i) + (N-1-j); a[i][j] = squa -s*(s+1)/2-(N-(((i+j)%2 == 0)?i:j));//基于什么样的思想,说明一下 } }for(i=0;i<N;i++){ for(j=0;j<N;j++) printf("%6d",a[j][i]); printf("\n");}return 0;}