请问一个算法问题。(100分)

  • 主题发起人 大花鸡
  • 开始时间

大花鸡

Unregistered / Unconfirmed
GUEST, unregistred user!
大家十一好!小弟先向各位致以节日的问候!
有一个小问题。就是:
1 2 3 4 5 6
20 21 22 23 24 7
19 32 33 34 25 8
18 31 36 35 26 9
17 30 29 28 27 10
16 15 14 13 12 11
如何用程序写出这样的n阶方阵,并打印出来??
 
有点意思
以下是代码
procedure TForm1.Button1Click(Sender: TObject);
var a: array[1..10,1..10] of integer;
i,j,n: integer;
begin
Col,EndCol,begin
Row,EndRow: integer;
s: string;
begin
n := 1;
begin
Row := 1;
EndRow := 10;
begin
Col := 1;
EndCol := 10;
while (begin
Row <= EndRow) or (begin
Col <= EndCol)do
begin
for i := begin
Col to EndColdo
begin
a[begin
Row,i] := n;
n := n + 1;
end;
begin
Row := begin
Row + 1;
for i := begin
Row to EndRowdo
begin
a[i,EndCol] := n;
n := n + 1;
end;
EndCol := EndCol - 1;
for i := EndColdo
wnto begin
Coldo
begin
a[EndRow,i] := n;
n := n + 1;
end;
EndRow := EndRow - 1;
for i := EndRowdo
wnto begin
Rowdo
begin
a[i,begin
Col] := n;
n := n + 1;
end;
begin
Col := begin
Col + 1;
end;

for i := 1 to 10do
begin
s := '';
for j := 1 to 10do
s := s + Format('%3d',[a[i,j]]) + ' ';
Memo1.Lines.Append(s);
end;
end;

运行结果
1 2 3 4 5 6 7 8 9 10
36 37 38 39 40 41 42 43 44 11
35 64 65 66 67 68 69 70 45 12
34 63 84 85 86 87 88 71 46 13
33 62 83 96 97 98 89 72 47 14
32 61 82 95 100 99 90 73 48 15
31 60 81 94 93 92 91 74 49 16
30 59 80 79 78 77 76 75 50 17
29 58 57 56 55 54 53 52 51 18
28 27 26 25 24 23 22 21 20 19
 
楼上好算法!
我想起码还有两种方法
1.可以推导出一个公式,这样依次填充
2.这样一圈一圈填,很明显还可以写成一个递归
 
推导出一个公式,这个比较难!
我想了5分钟,觉得太难了,放弃了
又用了5分钟,就写出了一圈一圈填的算法
还是一圈一圈填的算法简单
 
我就是想知道如何导出公式的。
 
To:SS2000
请问,你是怎么想出来的?谢谢了。[?]
 
你的数字是一圈一圈填,我也就想的一圈一圈填,最自然的想法了
你是不是问我怎么实现的?实现方法已经告诉你了
难道你是问我怎么为什么能实现我的一圈一圈填算法?
 
我也不知道,当我准备一圈一圈填,我就开始编代码
最简单就想用循环,一边写代码,一边思考,写的不对,
就修改,一边写,一边改,就写出来了。
其实这不是很难的算法
 
我记得大学课本上有这个算法,一点不难,
 
数学好一点的都容易实现,我是数学专业的,也就不多言了
 
大家都说,搞计算机真正厉害的还是学数学的!
对了,请教凤冠坡,我本来想用
for i := 1 to ndo
for j := 1 to ndo
begin
.......
end;
这种形式做,无奈水平有限,无法推导出这个公式,
您能告诉我们是否可以推导出这样的公式?
 
>>我记得大学课本上有这个算法,一点不难。
大花鸡,看来你是不用功,把学的都它忘了?!
不好意思,小声的问,这个算法,在大学的那门
课里?(我也没学过,唉:(
 
好象是数据结构,或是C,忘记了。
顺便说一句,我也是数学专业的。
 

Similar threads

顶部