主题:求表格算法
xinnuo
[专家分:10] 发布于 2006-07-07 00:52:00
将1-9九个数填入9乘9的表格,使每一横行和每一纵行和两斜行都有1-9这九个数(不重不漏)。
回复列表 (共5个回复)
沙发
小田甜ts [专家分:210] 发布于 2006-07-07 15:25:00
const a=9;
var
b:array [1..a,1..a] of byte;
x,x2,y,y2,i:byte;
begin
writeln;
y:=1;x:=a div 2+1;i:=1;
while i<=sqr(a) do begin
b[x,y]:=(i-1) mod a+1;
if i mod a=0 then y:=y+1 else begin x:=x-1; y:=y-1; end;
if y=a+1 then y:=1;if x=0 then x:=a; if y=0 then y:=a;
i:=i+1;
end;
for y:=1 to a do begin
for x:=1 to a do begin
write(b[x,y]:2);
end;
writeln;
end;
readln;
end.
板凳
小田甜ts [专家分:210] 发布于 2006-07-07 15:32:00
运行结果:
9 7 5 3 1 8 6 4 2
1 8 6 4 2 9 7 5 3
2 9 7 5 3 1 8 6 4
3 1 8 6 4 2 9 7 5
4 2 9 7 5 3 1 8 6
5 3 1 8 6 4 2 9 7
6 4 2 9 7 5 3 1 8
7 5 3 1 8 6 4 2 9
8 6 4 2 9 7 5 3 1
3 楼
小田甜ts [专家分:210] 发布于 2006-07-07 15:35:00
至于斜行,我是不会。
4 楼
xinnuo [专家分:10] 发布于 2006-07-07 21:51:00
还是非常感谢你啊,小田甜ts!虽然我不是用程序算的,但是我也是只有一个斜行无法满足啊!
我的答案:
1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9 1
3 4 5 6 7 8 9 1 2
4 5 6 7 8 9 1 2 3
5 6 7 8 9 1 2 3 4
6 7 8 9 1 2 3 4 5
7 8 9 1 2 3 4 5 6
8 9 1 2 3 4 5 6 7
9 1 2 3 4 5 6 7 8
我本来就很怀疑它的存在性,现在看了你的答案我更加怀疑。
小田甜ts,你可以说一下你程序的算法思路吗?谢谢!
5 楼
小田甜ts [专家分:210] 发布于 2006-07-08 15:09:00
你还是不要怀疑存在性,我不是用的穷举,是这样的:
9 7 5 3 [B]1[/B] 8 6 4 2
1 8 6 4 2 [B]9[/B] 7 5 3
2 9 7 5 3 1 [B]8[/B] 6 4
3 1 8 6 4 2 9 [B]7[/B] 5
4 2 9 7 5 3 1 8 [B]6[/B]
[B]5[/B] 3 1 8 6 4 2 9 7
6 [B]4[/B] 2 9 7 5 3 1 8
7 5 [B]3[/B] 1 8 6 4 2 9
8 6 4 [B]2[/B] 9 7 5 3 1
(当然如果你连这样的斜行都要求的话那就没有了[b]吧![/b])
9 7 5 [B]3[/B] 1 8 6 4 2
1 8 6 4 [B]2 9[/B] 7 5 3
2 9 7 5 3 [B]1[/B] 8 6 4
3 1 8 6 4 2 [B]9[/B] 7 5
4 2 9 7 5 3 1 [B]8[/B] 6
5 3 1 8 6 4 2 9 [B]7[/B]
[B]6[/B] 4 2 9 7 5 3 1 8
7 [B]5[/B] 3 1 8 6 4 2 9
8 6 [B]4[/B] 2 9 7 5 3 1
以下略……
我来回复