Z數組:
#include<stdio.h>#include<stdlib.h>void fun(int n){ /*動態建立二維數組*/ int **a = (int **)malloc(n*sizeof(int*)); if(a==NULL) return; int i,j; for(i=0;i<n;i++) a[i] = (int*) malloc(n*sizeof(int)); for(i=0;i<n;i++){ for(j=0;j<n;j++){ int k = i + j; if(k<n){ int sum = k*(k+1)/2; int index; index = (k%2==0)? j : i ; a[i][j] = sum + index; }else{ int t = 2*n-1-k; int sum = (1+t)*t/2; sum = n*n-1-sum; int index = (k%2==0) ? (n-i) : (n-j); a[i][j] = sum + index; } } } for(i = 0;i<n;i++){ for(j=0;j<n;j++){ printf("%d\t",a[i][j]); } printf("\n"); } /*釋放*/ for(i=0;i<n;i++) free(a[i]); free(a); return;}int main(){ int n; scanf("%d",&n); printf("%d\n",n); while(n!=0){ fun(n); scanf("%d",&n); printf("%d\n",n); } return 1;}
螺旋數組:
#include<stdio.h>#include<stdlib.h>void fun(int n){ //動態建立二維數組 int **arry = (int **)malloc(n*sizeof(int*)); if(arry==NULL) return; int i,j; for(i=0;i<n;i++) arry[i] = (int*) malloc(n*sizeof(int)); //螺旋數組 int k=0,a=1; i=j=0; for(;k<(n+1)/2;k++){ while(j<n-k) arry[i][j++] = a++; i++; j--; while(i<n-k) arry[i++][j] = a++; i--; j--; while(j>=k) arry[i][j--] = a++; i--; j++; while(i>k) arry[i--][j] = a++; i++; j++; } for(i=0;i<n;i++){ for(j=0;j<n;j++) printf("%d\t",arry[i][j]); printf("\n"); } //釋放記憶體 for(i=0;i<n;i++) free(arry[i]); free(arry); return;}int main(){ int n; scanf("%d",&n); while(n!=0){ fun(n); scanf("%d",&n); } return 1;}