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;
}