方法1:
#include<iostream>
using namespace std;
#define SIZE 8
int main()
{
int matrix[SIZE][SIZE]={0};
int a[SIZE][SIZE]={0};
int i,j,x,y,value=0;
int *p;
p=&matrix[0][0];
for(i=0;i<SIZE*SIZE;i++)
*p++=i;
cout<<“原始矩阵如下:\n”<<endl;
for(i=0;i<SIZE;i++)
{
for(j=0;j<SIZE;j++)
cout<<*(*(matrix+i)+j)<<” “;
cout<<endl;
}
i=0;j=0;
for(x=0;x<SIZE;x++)
for(y=0;y<SIZE;y++)
{
*(*(a+i)+j)=*(*(matrix+x)+y);
if((i==SIZE-1||i==0)&&j%2==0)
{
j++;
continue;
}
if((j==0||j==SIZE-1)&&i%2==1)
{
i++;
continue;
}
if((i+j)%2==0)
{
i–;
j++;
}
else
{
i++;
j–;
}
}
cout<<“经过Z字编排后的矩阵如下:”<<endl;
for(i=0;i<SIZE;i++)
{
for(j=0;j<SIZE;j++)
cout<<*(*(a+i)+j)<<” “;
cout<<endl;
}
return 0;
}
方法2:
int main()
{
int N;
int s,i,j;
int squa;
scanf(“%d”,&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)?j:i);
else
{
s=(N-1-i)+(N-1-j);
a[i][j]=squa-s*(s+1)/2-(N-(((i+j)%2==0)?j:i));
}
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf(“%6d”,a[i][j]);
printf(“\n”);
}
return 0;
}