注册 登录
编程论坛 C++教室

[求助]九宫格

xvholly 发布于 2007-03-28 19:11, 1716 次点击
朋友们给我讲讲怎样实现九宫格的算法?
九宫格:将1~9不重复的填入3X3的格子里,使横,竖,斜数字相加都相等.
谢谢诸位了!
9 回复
#2
song42007-03-28 21:37
呵呵
我只知道
先确定那些组加一起相等
然后各族互相组合
#3
yuyunliuhen2007-03-28 22:18

这个好象以前做过

#4
xvholly2007-03-31 14:15
以下是引用song4在2007-3-28 21:37:05的发言:
呵呵
我只知道
先确定那些组加一起相等
然后各族互相组合

那是不是先要算出,加起来应该是多少? 是的话还是想不出怎样计算每组的和.

#5
western82007-04-02 00:56
这是二维幻方游戏吧,有规律的。自己先找找,很简单的;
Hint:可以斜着填。
#6
wfpb2007-04-02 15:05

斜着填好写一些...

#7
xvholly2007-04-20 13:17
回复:(xvholly)[求助]九宫格

//终于知道算法了,还以为是要产生一组随机数来一个个的测试.

void array(int a[3][3])
{
int k = 1,
i = 0,
j = 1;
a[0][1] = k++;
while (k <= 9)
{
i--;
j++;

if (i < 0 && j > 2)
{
i += 2;
j --;
}

if (i < 0)
{
i = 2;
}
if (j > 2)
{
j = 0;
}

if (a[i][j] == 0)
{
a[i][j] = k++;
}
else
{
i += 2;
j--;
a[i][j] = k++;
}
}
}

#8
sunkaidong2007-04-20 13:41
算法是不错,可以说一下数学上的依据吗?
#9
sunkaidong2007-04-20 13:42

#include "stdio.h"

void array(int a[3][3])
{
int k = 1,
i = 0,
j = 1;
a[0][1] = k++;
while (k <= 9)
{
i--;
j++;

if (i < 0 && j > 2)
{
i += 2;
j --;
}

if (i < 0)
{
i = 2;
}
if (j > 2)
{
j = 0;
}

if (a[i][j] == 0)
{
a[i][j] = k++;
}
else
{
i += 2;
j--;
a[i][j] = k++;
}
}
}
main()
{ int a[3][3]={0};
array(a);
for(int i=0;i<3;i++)
{
for( int j=0;j<3;j++)
{
printf(" %d ",a[i][j]);
}
printf("\n");
}
}

我把测试数据也给了,就是不知道为什么?再顶一下

#10
风之语录2007-04-20 14:25
这算法不是古书里写的步法吗???
1