求n阶魔方矩阵的程序,自己写的但运行结果错误,求高手找错!
求n阶魔方矩阵的规则这我就不写了,大家可以搜出来它的规则,我自己附上程序大家给找下错,然后最好修改下!!!!!!!!
#define K 99
#include "stdio.h "
#include <stdlib.h>
#define P system( "pause ");
main()
{int a[K][K];
int i,j,p,q;
int m;
i=2;
j=3;/*原来我写的程序在我调试排查错误的时候给修改了,去掉了输入n产生n阶魔方阵的部分*/
m=1;
a[i][j]=1;
for(p=1;p <=3;p++)
{for(q=1;q <=3;q++)
{ if(i==3||j==3)
{if(i==3)
i=1,j++;
else i++,j=1;
}
else i++,j++;
m=m+1;
a[i][j]=m;
}
m=m+1;/*大家凑合下看吧,反正是这个算法,就是不知道哪错的*/
a[i][j-1]=m;
}
printf( "\n MAGIC MATRIX\n ");
for(i=1;i <=3;i++)
{for(j=1;j <=3;j++)
printf( "%d\t ",a[i][j]);/*这个格式还可以吧,刚开始我不知道用tab控制缩进*/
printf( "\n ");
}
P
}
可郁闷的是我怎么也找不到错误,我画的ns流程图就是正确的,我自己用人工检查的方法都可以得到正确结果,可是不知道写成代码然后运行就不行了
[解决办法]
一个数字本应放在a[i][i]位置,但如果a[i][j]已经有数字了,那么就要放在a[i][i]下面,你的程序没有判断,另外,matrix的1应该放在第一行的中间位置。
[解决办法]
不懂..
什么是魔方.
[解决办法]
#include <stdio.h>
#define N 7
#include <conio.h>
void main()
{
int a[N+1][N+1];
int i,j,k,l=0;
clrscr();
for(i=0;i <N;i++)
for(j=0;j <N;j++)
a[i][j]=0;
i=1;
j=N/2+1;
a[i][j]=1;
for(k=2;k <=N*N;k++)
{
if((k-1)%N==0)
i++;
else
{
/* {if((i-1)==0)
i=N;
else
i=i-1;}
{if((j+1)==N)
j=1;
else
j=N; } */
i=i==1?N:i-1;
j=j==N?1:j+1;
}
a[i][j]=k;
}
for(i=1;i <=N;i++)
for(j=1;j <=N;j++)
{
printf( "%4d ",a[i][j]);
l++;
if(l%N==0)
printf( "\n ");
}
}
[解决办法]
一个别人写的程序,很简洁,算法很好
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
main()
{
int array[16][16],i,j,k,n;
/*初始化*/
while (1)
{printf( "请输入n.(0 <n <16),n是奇数.\n ");
scanf( "%d ",&n);
if((n> 0)&&(n <16)&&(n%2!=0))
{printf( "矩阵阶数是%d\n ",n);
break;
}
}
for(i=1;i <=n;i++)
for(j=1;j <=n;j++)
array[i][j]=0;
/*建立魔方矩阵*/
j=(n/2)+1;
array[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(array[i][j]==0)
array[i][j]=k;
else
{
i=i+2;
j=j-1;
array[i][j]=k;
}
}
/*输出n阶魔方矩阵*/
for(i=1;i <=n;i++)
{
for(j=1;j <=n;j++)
printf( "%5d ",array[i][j]);
printf( "\n\n ");
}
}
[解决办法]
二楼正解,另外,你的程序只是求3阶幻方?