#include<stdio.h>
int a[200][200]={0} /*200为我自己定义的,可根据需要修改*/
void JSZ(int n) /*奇数魔方阵算法*/
{int p,k,i,j
p=0k=n/2
a[p][k]=1
for(i=2i<=n*ni++)
{if((i-1)%n==0)
{if(p==n-1)p=0
else p++
}
else
{if(p==0)p=n-1
else p--
if(k==n-1)k=0
else k++
亩型 }
a[p][k]=i
}
}
void Ou4bZ(int n) /*偶数4的倍数魔方阵算法*/
{int a1[200][200],a2[200][200],i,j
for(i=0i<ni++)
for(j=0j<nj++)
{if(i%4==0||(i+1)%4==0)a1[i][j]=j+1
else a1[i][j]=n-j
}
for(j=0j<nj++)
for(i=0i<ni++)
{if(j%4==0||(j+1)%4==0)a2[i][j]=n*i
else a2[i][j]=(n-1-i)*n
}
for(i=0i<ni++)
for(j=0j<nj++)
a[i][j]=a1[i][j]+a2[i][j]
}
void N_4OuZ(int n) /*偶数培旦非4的倍数魔方阵算法*/
{int s[200],x[200],z[200],y[200],i,p,k,b[200][200]={0}
z[0]=4z[1]=10s[0]=2s[1]=9
for(i=2i<n/2-1i++)
{if(i%2==0)
{z[i]=z[i-1]+1
s[i]=s[i-1]+3
}
else
{z[i]=z[i-1]+7
s[i]=s[i-1]+5
}
}
y[0]=3y[1]=5x[0]=1x[1]=6
for(i=2i<n/2i++)
{if(i%2==0)
{y[i]=y[i-1]+3
x[i]=x[i-1]+1
}
else
{y[i]=y[i-1]+5
x[i]=x[i-1]+7
}
}
Ou4bZ(n-2)
for(p=1p<n-1p++)
for(k=1k<n-1k++)
b[p][k]=a[p-1][k-1]+(n*n-(n-2)*(n-2))/2
for(p=1p<n-1p++)
for(k=1k<n-1k++)
a[p][k]=b[p][k]
for(i=0i<n/2-1i++)
{a[0][i]=s[i]
a[n-2-i][0]=z[i]
}
for(i=0i<n/2i++)
{a[n-1][n-2-i]=x[i]
a[i][n-1]=y[i]
}
for(i=0i<ni++)
{if(i==0)a[n-1][0]=n*n+1-a[0][n-1]
else if(i<n/2-1)a[n-1][i]=n*n+1-a[0][i]
else if(i==n-1)a[n-1][n-1]=n*n+1-a[0][0]
else a[0][i]=n*n+1-a[n-1][i]
if(i>0&&i<n/2)a[i][0]=n*n+1-a[i][n-1]
if(i>=n/2&&i<n-1)a[i][n-1]=n*n+1-a[i][0]
}
}
void main()/*主函数*/
{int i,j,n
lp:printf("JieShu(1~200): ")
scanf("%d",&n)
if(n<1||n==2||n>200) /*由于没有二阶魔方阵,"n>200"为超出定义范围*/
{printf("SCANF ERROR!\n")
goto lp
}
if(n%2==0)
{if(n%4==0)Ou4bZ(n)
else N_4OuZ(n)
}
else JSZ(n)
for(i=0i<迅中猜ni++)
{for(j=0j<nj++)
printf("%5d",a[i][j])
printf("\n")
}
goto lp
}
#include <stdio.h>
#include <math.h>
#define N 100 /*N可以改变*/
void main()
{
int n,p=1
void jici(int n)
void sioubeishu(int n)
void oubeishu(int n)
void sijibeishu(int n)
void elseoushu(int n)
printf("***说明(本程序用于输出任意数阶次的魔方矩阵,其行,列,对角线之和的均值相同。)\n")
printf(" ***说明(最右边的,和最下边的用于统计每行,每列的元素之和 。) \n\n")
printf(" 请输入一巧厅个要求阶次的魔方矩阵的边长(2~%d): ",N)
while(p)
{
scanf("%d",&n)
if((n>1)&&(n<=N))
p=0
}
if(fabs((n-1)%2)<1e-006)
jici(n)
else
if(fabs((n%4))<1e-006)
{
if(n==4) oubeishu(n)
else
if(fabs(n%8)<1e-006)
sioubeishu(n)
else
sijibeishu(n)
}
else
elseoushu(n)
}
void jici(int n)
{
int a[N][N]={0}
int i,j,k,sum
i=0
j=(n-1)/2
a[0][j]=1
for(k=2k<=n*nk++)
{
i=i-1
j=j+1
if((i<0)&&(j>孝扮隐n-1))
{
i=i+2j=j-1
}
else
{
if(i<0) i=n-1
if(j>n-1) j=0
}
if(a[i][j]==0) a[i][j]=k
else
{
i=i+2
j=j-1
a[i][j]=k
}
}
sum=0
for(i=0,j=0i<ni++,j++)
{
sum=sum+a[i][j]
}
a[n][n]=sum
for(i=0i<ni++)
{
sum=0
for(j=0j<nj++)
sum=sum+a[i][j]
a[i][n]=sum
}
for(j=0j<nj++)
{
sum=0
for(i=0i<ni++)
sum=sum+a[i][j]
a[n][j]=sum
}
for(i=0i<n+1i++)
{
for(j=0j<n+1j++)
printf("%5d",a[i][j])
printf("\n\n")
}
}
void oubeishu(int n)
{
int a[N][N]={0}
int k,t,i,j,sum
k=1
for(i=0i<ni++)
for(j=0j<nj++)
缺老 {
a[i][j]=k
k++
}
for(i=0,j=0i<n/2i++,j++)
{
t=a[i][j]
a[i][j]=a[n-1-i][n-1-j]
a[n-1-i][n-1-j]=t
}
for(i=0,j=n-1i<n/2i++,j--)
{
t=a[i][j]
a[i][j]=a[n-1-i][n-1-j]
a[n-1-i][n-1-j]=t
}
sum=0
for(i=0,j=0i<ni++,j++)
{
sum=sum+a[i][j]
}
a[n][n]=sum
for(i=0i<ni++)
{
sum=0
for(j=0j<nj++)
sum=sum+a[i][j]
a[i][n]=sum
}
for(j=0j<nj++)
{
sum=0
for(i=0i<ni++)
sum=sum+a[i][j]
a[n][j]=sum
}
for(i=0i<n+1i++)
{
for(j=0j<n+1j++)
printf("%5d",a[i][j])
printf("\n\n")
}
}
void sioubeishu(int n)
{
int a[N][N]={0}
int k,t,i,j,x,y,sum
k=1
for(j=0j<nj++)
for(i=0i<ni++)
{
a[i][j]=k
k++
}
for(x=1x<=n/8x++)
for(y=1y<=n/4y++)
{
for(i=4*(x-1),j=4*(y-1)i<=4*x-1i++,j++)
{
t=a[i][j]
a[i][j]=a[n-1-i][n-1-j]
a[n-1-i][n-1-j]=t
}
for(i=4*x-1,j=4*(y-1)i>=4*(x-1)i--,j++)
{
t=a[i][j]
a[i][j]=a[n-1-i][n-1-j]
a[n-1-i][n-1-j]=t
}
}
sum=0
for(i=0,j=0i<ni++,j++)
{
sum=sum+a[i][j]
}
a[n][n]=sum
for(i=0i<ni++)
{
sum=0
for(j=0j<nj++)
sum=sum+a[i][j]
a[i][n]=sum
}
for(j=0j<nj++)
{
sum=0
for(i=0i<ni++)
sum=sum+a[i][j]
a[n][j]=sum
}
for(i=0i<n+1i++)
{
for(j=0j<n+1j++)
printf("%5d",a[i][j])
printf("\n\n")
}
}
void sijibeishu(int n)
{
int a[N][N]={0}
int k,t,i,j,x,y,sum
k=1
for(j=0j<nj++)
for(i=0i<ni++)
{
a[i][j]=k
k++
}
for(x=1x<=(n-4)/8x++)
for(y=1y<=n/4y++)
{
for(i=4*(x-1),j=4*(y-1)i<=4*x-1i++,j++)
{
t=a[i][j]
a[i][j]=a[n-1-i][n-1-j]
a[n-1-i][n-1-j]=t
}
for(i=4*x-1,j=4*(y-1)i>=4*(x-1)i--,j++)
{
t=a[i][j]
a[i][j]=a[n-1-i][n-1-j]
a[n-1-i][n-1-j]=t
}
}
x=(n+4)/8
for(y=1y<(n+4)/8y++)
{
for(i=4*(x-1),j=4*(y-1)i<=4*x-1i++,j++)
{
t=a[i][j]
a[i][j]=a[n-1-i][n-1-j]
a[n-1-i][n-1-j]=t
}
for(i=4*x-1,j=4*(y-1)i>=4*(x-1)i--,j++)
{
t=a[i][j]
a[i][j]=a[n-1-i][n-1-j]
a[n-1-i][n-1-j]=t
}
}
y=(n+4)/8
for(i=4*(x-1),j=4*(y-1)i<=4*x-3i++,j++)
{
t=a[i][j]
a[i][j]=a[n-1-i][n-1-j]
a[n-1-i][n-1-j]=t
}
for(i=4*x-1,j=4*(y-1)i>=4*x-2i--,j++)
{
t=a[i][j]
a[i][j]=a[n-1-i][n-1-j]
a[n-1-i][n-1-j]=t
}
sum=0
for(i=0,j=0i<ni++,j++)
{
sum=sum+a[i][j]
}
a[n][n]=sum
for(i=0i<ni++)
{
sum=0
for(j=0j<nj++)
sum=sum+a[i][j]
a[i][n]=sum
}
for(j=0j<nj++)
{
sum=0
for(i=0i<ni++)
sum=sum+a[i][j]
a[n][j]=sum
}
for(i=0i<n+1i++)
{
for(j=0j<n+1j++)
printf("%5d",a[i][j])
printf("\n\n")
}
}
void elseoushu(int n)
{
int a[N][N]={0}
int m,k,i,j,sum,u,t,h
m=n/2
i=0
j=(m-1)/2
a[0][j]=1
for(k=2k<=m*mk++)
{
i=i-1
j=j+1
if((i<0)&&(j>m-1))
{
i=i+2j=j-1
}
else
{
if(i<0) i=m-1
if(j>m-1) j=0
}
if(a[i][j]==0) a[i][j]=k
else
{
i=i+2
j=j-1
a[i][j]=k
}
}
i=0
j=(m-1)/2+m
a[i][j]=m*m*2+1
for(k=m*m*2+2k<=m*3*mk++)
{
i=i-1
j=j+1
if((i<0)&&(j>m*2-1))
{
i=i+2
j=j-1
}
else
{
if(i<0) i=m-1
if(j>m*2-1) j=m
}
if(a[i][j]==0) a[i][j]=k
else
{
i=i+2
j=j-1
a[i][j]=k
}
}
i=m
j=(m-1)/2
a[i][j]=m*m*3+1
for(k=m*m*3+2k<=m*4*mk++)
{
i=i-1
j=j+1
if((i<m)&&(j>m-1))
{
i=i+2j=j-1
}
else
{
if(i<m) i=m*2-1
if(j>m-1) j=0
}
if(a[i][j]==0) a[i][j]=k
else
{
i=i+2
j=j-1
a[i][j]=k
}
}
i=m
j=(m-1)/2+m
a[i][j]=m*m+1
for(k=m*m+2k<=2*m*mk++)
{
i=i-1
j=j+1
if((i<m)&&(j>m-1+m))
{
i=i+2
j=j-1
}
else
{
if(i<m) i=m*2-1
if(j>m*2-1) j=m
}
if(a[i][j]==0) a[i][j]=k
else
{
i=i+2
j=j-1
a[i][j]=k
}
}
t=(n+2)/4u=n/2
for(j=0j<t-1j++)
for(i=0i<mi++)
{
h=a[i][j]
a[i][j]=a[i+m][j]
a[i+m][j]=h
}
for(j=n-t+2j<nj++)
for(i=0i<mi++)
{
h=a[i][j]
a[i][j]=a[i+m][j]
a[i+m][j]=h
}
{
h=a[t-1][0]
a[t-1][0]=a[t+u-1][0]
a[t+u-1][0]=h
}
{
h=a[t-1][t-1]
a[t-1][t-1]=a[t+u-1][t-1]
a[t+u-1][t-1]=h
}
sum=0
for(i=0,j=0i<ni++,j++)
{
sum=sum+a[i][j]
}
a[n][n]=sum
for(i=0i<ni++)
{
sum=0
for(j=0j<nj++)
sum=sum+a[i][j]
a[i][n]=sum
}
for(j=0j<nj++)
{
sum=0
for(i=0i<ni++)
sum=sum+a[i][j]
a[n][j]=sum
}
for(i=0i<n+1i++)
{
for(j=0j<n+1j++)
printf("%5d",a[i][j])
printf("\n\n")
}
}
这个是我自己编的魔方矩阵的任意数输出程序, 用的是数组方面的内容,比较好理解
#include<stdio.h>void main(){
int i,j,n,row,col,a[11][11]
printf("please input n:")
scanf("%d",&n)
col=n/2//
row=0//
for(i=1i<=n*ni++){ //答局i<=n*n,楼主写错了,如果想保持为<可做相应修改
if(row==-1) // 不明白再联系吧
row=n-1
if(col==n)
col=0 //禅帆
a[row][col]=i//
if(i%n==0)
row++
else{
row--
col++
}
}
for(i=0i<ni++){
for(j=0j<nj++)
printf("贺举雹%10d",a[i][j])
printf("\n")
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)