改变矩阵中心及四角
#include<stdio.h>
#include<malloc.h>
void Change(int **p,int n)
{
int temp;
if(p[0][0]<p[0][1])
{
temp=p[n/2][n/2];
p[n/2][n/2]=p[n-1][n-1];
p[n-1][n-1]=temp;
temp=p[0][n-1];
p[0][n-1]=p[0][1];
p[0][1]=temp;
temp=p[n-1][0];
p[n-1][0]=p[0][2];
p[0][2]=temp;
temp=p[n-1][n-1];
p[n-1][n-1]=p[0][3];
p[0][3]=temp;
}
else
{
temp=p[n/2][n/2];
p[n/2][n/2]=p[0][0];
p[0][0]=temp;
temp=p[0][0];
p[0][0]=p[n-1][n-1];
p[n-1][n-1]=temp;
temp=p[0][n-1];
p[0][n-1]=p[n-1][n-2];
p[n-1][n-2]=temp;
temp=p[n-1][0];
p[n-1][0]=p[n-1][n-3];
p[n-1][n-3]=temp;
temp=p[n-1][n-1];
p[n-1][n-1]=p[n-1][n-4];
p[n-1][n-4]=temp;
}
}
void main()
{
int i,j;
int c1,c2,c3;
int **p;
printf("1.正序矩阵 2.反序矩阵/n请选择正序或反序矩阵:");
scanf("%d",&c1);
printf("输入矩阵开始值:");
scanf("%d",&c2);
printf("输入矩阵阶数:");
scanf("%d",&c3);
if((p=(int**)malloc(c3*sizeof(int)))==NULL)
printf("申请内存失败!");
for(i=0;i<c3;i++)
{
if((p[i]=(int*)malloc(c3*sizeof(int)))==NULL)
printf("申请内存失败!");
}
printf("原矩阵为:/n");
if(c1==1)
{
for(i=0;i<c3;i++)
{
for(j=0;j<c3;j++)
{
p[i][j]=c2;
printf("%-4d",p[i][j]);
c2++;
}
printf("/n");
}
}
else
{
c2=c2+c3*c3;
for(i=0;i<c3;i++)
{
for(j=0;j<c3;j++)
{
p[i][j]=c2-1;
printf("%-4d",p[i][j]);
c2--;
}
printf("/n");
}
}
Change(p,c3);
printf("修改后的矩阵为:/n");
for(i=0;i<c3;i++)
{
for(j=0;j<c3;j++)
printf("%-4d",p[i][j]);
printf("/n");
}
}
魔方阵
#include <stdio.h>
#define N 16 //这里可以修改N的值
void main()
{
int i,j,k,p,m,n,a[N][N]={0};
p=1;
while(p==1)
{
printf("Enter n(1~%d):",N-1);
scanf("%d",&n);
if((n!=0)&&(n<N)&&(n%2!=0))
p=0;
}
i=n+1;
j=n/2+1;
a[1][j]=1;
for(k=2;k<=n*n;k++)
{
i=i-1;
j=j+1;
if((i<1)&&(j>n))
{
i=i+2;j=j-1;
}
else
{
if(i<1) i=n;
if(j>n) j=1;
}
if(a[i][j]==0)
a[i][j]=k;
else
{
i=i+2;
j=j-1;
a[i][j]=k;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%4d",a[i][j]);
printf("/n");
}
}