五阶幻方的几个求法.

blacksapper 2009-04-19 02:43:56
奇幻方主流有四种求法.我用了一种.还有个阶梯法比较搞人.第二个printf没法用...
算法.第一行中间是1
每次向右上移动.
到了边界则换到另外一个边界.
如果下一个数有了.就下一一个
如果到了右上角就下一一个.
我这个是5阶幻方.
# include"stdio.h"
void main()
{
int a[7][7]={0};
int i=1,j=3,k=1;
int x,y;
while (k<26)
{
a[j]=k;
i--;
j++;
k++;
if(0!=a[j])
{i+=2;j-=1;continue;}
if(i==0&&j==6)
{i=2;j=5;continue;}
if (i==0){i=5;}//5
if(j==6){j=1;}
}
for (x=1;x<6;x++)
{
for(y=1;y<6;y++)
{printf("%d\t",a[x][y]);}
printf("\n");
}
}
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
这个是图.
下面的是阶梯法的结果.手算的
3 16 9 22 15
20 8 21 14 2
7 25 13 1 19
24 12 5 18 6
11 4 17 0 23 .
这个是阶梯法的草稿
0 0 0 0 5 0 0 0 0零
0 0 0 4 0 10 0 0 0一
0 0 3 0 9 0 15 0 0二
0 2 0 8 0 14 0 20 0三
1 0 7 0 13 0 19 0 25四
0 6 0 12 0 18 0 24 0五
0 0 11 0 17 0 23 0 0六
0 0 0 16 0 22 0 0 0七
0 0 0 0 21 0 0 0 0八

后面的是未完成品我想知道为什么第二个printf没法用

# include "stdio.h"
void main()
{
int i,j,x,y;
int a[9][9]={0};
int hang=4,lie=0;
int ljq1=0;
int k=1;
do //输入模块 混合调整模块
{//调度算法
a[hang][lie]=k;
ljq1++;
if (ljq1==5) //计数器归零
{
hang+=5;
lie-=3;
ljq1=0;
k++;
continue;
}
hang--;
lie++;
k++;

}while (k!=26);//end输入模块

for(hang=0;hang<9;hang++)//a数组输出模块
{
for (lie=0;lie<9;lie++)
{
printf("%d\t",a[hang][lie]);
}
printf("\n");
}


//调整模块
//列调整一
for (i=0;i<3;i++)
{
for (j=2;j<8;j++)
{
if (0==a[i][j]) continue;
else{
printf("3\n");
for (x=6;x>1;x++)
{ printf("*\n");
if (a[j][x]==0)
{
a[j][x]=a[i][j];
}
}
}
}
}

//列调整二
for (i=7;i<9;i++)
{
for (j=2;j<8;j++)
{
if (0==a[i][j]) continue;
else{

for (x=6;x>1;x++)
if (a[j][x]==0)
{
a[j][x]=a[i][j];
}
}
}
}
printf("1\n");
for(hang=0;hang<9;hang++)//a数组输出模块
{
for (lie=0;lie<9;lie++)
{
printf("%d\t",a[hang][lie]);
}
printf("\n");
}




}
...全文
493 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangf1983 2009-04-20
  • 打赏
  • 举报
回复
这个放到C++去吧
面试有时候会碰到这种题
ZOthello 2009-04-19
  • 打赏
  • 举报
回复
不大懂,顶起!

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧