主题:奇数幻方求解?
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
有哪位热心的朋友帮我看一下面的程序哪里出错了?,我用动态二维数组,为什么运算不出结果呀?用静态的就可以得出结果??......大侠们帮帮忙.....在这先谢谢了!
vod main()
{
int m,mm,i,j,k,ni,nj;
int **a;
printf("输入奇数幻方大小:\n");
scanf("%d",&m);
if(m<=0||m%2==0)
{
printf("输入错误!\n");
exit(0);
}
//分配动态二维数组
a=(int**)malloc(m*sizeof(int*));
for(i=0;i<m;i++)
a[i]=(int*)malloc(m*sizeof(int));
mm=m*m;
i=0;
j=m/2;
for(k=1;k<=mm;k++)
{
*(a[i]+j)=k;
if(i==0)
ni=m-1;
else
ni=i-1;
if(j==m-1)
nj=0;
else
nj=j+1;
if(*(a[ni]+nj)==0)
{
i=ni;
j=nj;
}
else
i++;
}
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
printf("%03d ",*(a[i]+j));
printf("\n");
}
//释放内存
for(i=0;i<m;i++)
free(a[i]);
free(a);[/size][/size]
#include<stdlib.h>
#include<malloc.h>
有哪位热心的朋友帮我看一下面的程序哪里出错了?,我用动态二维数组,为什么运算不出结果呀?用静态的就可以得出结果??......大侠们帮帮忙.....在这先谢谢了!
vod main()
{
int m,mm,i,j,k,ni,nj;
int **a;
printf("输入奇数幻方大小:\n");
scanf("%d",&m);
if(m<=0||m%2==0)
{
printf("输入错误!\n");
exit(0);
}
//分配动态二维数组
a=(int**)malloc(m*sizeof(int*));
for(i=0;i<m;i++)
a[i]=(int*)malloc(m*sizeof(int));
mm=m*m;
i=0;
j=m/2;
for(k=1;k<=mm;k++)
{
*(a[i]+j)=k;
if(i==0)
ni=m-1;
else
ni=i-1;
if(j==m-1)
nj=0;
else
nj=j+1;
if(*(a[ni]+nj)==0)
{
i=ni;
j=nj;
}
else
i++;
}
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
printf("%03d ",*(a[i]+j));
printf("\n");
}
//释放内存
for(i=0;i<m;i++)
free(a[i]);
free(a);[/size][/size]