回 帖 发 新 帖 刷新版面

主题:求表格算法

将1-9九个数填入9乘9的表格,使每一横行和每一纵行和两斜行都有1-9这九个数(不重不漏)。

回复列表 (共5个回复)

沙发

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.

板凳

运行结果:
 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 楼

至于斜行,我是不会。

4 楼

还是非常感谢你啊,小田甜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 楼

你还是不要怀疑存在性,我不是用的穷举,是这样的:
 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
以下略……

我来回复

您尚未登录,请登录后再回复。点此登录或注册