如何实现这个矩阵算法?急!!!! ( 积分: 80 )

  • 主题发起人 主题发起人 zwnheut
  • 开始时间 开始时间
Z

zwnheut

Unregistered / Unconfirmed
GUEST, unregistred user!
要求:在文本框输入一个数(比如:5),点生成矩阵按钮,可以生成一个这种样式的矩阵
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
麻烦各位!
 
要求:在文本框输入一个数(比如:5),点生成矩阵按钮,可以生成一个这种样式的矩阵
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
麻烦各位!
 
刚写好的算法...不过是用Delphi 写的..没有 Visual C++啊..
不过你按这个算法写绝对可以的.

procedure TForm1.Button1Click(Sender: TObject);
var
X, Y : Integer;
NX, NY : Integer;
// 动态二维数组 用于记录结构
AResult : Array of Array of Integer;

GInteger : Integer;
// 输入的数据
GRound : Integer;
// 计算圈数 (不是圈数,是边的次数)
NCount : Integer;
// 当前边的 数字个数 // 第一 N 表示 Now
NNumber : Integer;
// 当前应打印的数字 // 第一 N 表示 Now
i : Integer;
j : Integer;
Flat : Boolean;
GString : String;
begin

GInteger := StrToInt(Trim(Edit1.Text));
SetLength(AResult, GInteger, GInteger);
// 分配 AResult 数组的 空间
// 先记录第一行
for i := 1 to GIntegerdo
AResult[i - 1, 0] := i;
X := GInteger - 1;
Y := 0;

// 经过计算, 边数为 (GInteger - 1) * 2
// 当然下面的方法也是对的
// GRound := 0;
// for i := 1 to GInteger - 1do
// GRound := i + i;
GRound := (GInteger - 1) * 2;
// 边数
NCount := GInteger - 1;
// 当前边的 数字个数
NNumber := GInteger + 1;
// 当前应打印的数字
Flat := True;
for i := 1 to GRounddo
begin
Case i Mod 4 of
1 : NY := 1;
2 : NX := -1;
3 : NY := -1;
0 : NX := 1;
end;

for j := NCountdo
wnTo 1do
begin
if Flat = True then
Y := Y + NY
else
X := X + NX;
AResult[X, Y] := NNumber;
NNumber := NNumber + 1;
end;
Flat := Not Flat;
if (i Mod 2) = 0 then
NCount := NCount - 1;
end;
// 结果是保存在 AResult 数组中的...
// 下部分是显示结果出来..
for i := 0 to GInteger - 1do
begin
GString := '';
for j := 0 to GInteger - 1do
GString := GString + ' ' + IntToStr(AResult[j, i]);
Memo1.Lines.Add(GString);
end;
end;
 
jiang en lun xuan?
 
接受答案了.
 
后退
顶部