求算法:输入N( N>5)
输出图形(N=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中这个query为何不能赋值?
- Oh~Ye 猩猩大变身,可以吃香蕉了 (笑.............)
- 写XML文件注释
- 急救!SPCOMM控件的问题
- 【delphi 】程序大本营->『邀大下豪杰,共赏 Delphi 风采』<- 〖下载、讨论、畅谈〗
- string怎么转化成word类型?急~~~~~解决马上给分
- 求助!sql server 种子 自动标识 递增 在delphi中突然不可用??:(,嘴气歪了
- SOS!要命啦!大家快来帮帮忙吧!
- 使用XMLTransformProvider 控件的問題, 急救!!!!!!
- 请问如何把foxbase的db格式转换成access的格式?
- 请帮帮忙!怎样在delphi中声明控件数组?
- 这是什么控件?
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TSingleArray = array of Integer;
TData = array of array of Integer;
TForm1 = class(TForm)
btn1: TButton;
edt1: TEdit;
Label1: TLabel;
mmo1: TMemo;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
procedure Circle(aBegin, aSize, aLayer, aNum: Integer; var aData: TData);
function Matrix(aNum: Integer): TData;
end;var
Form1: TForm1;implementation{$R *.dfm}{ TForm1 }
{ TForm1 }procedure TForm1.Circle(aBegin, aSize, aLayer, aNum: Integer; var aData: TData);
var
i: integer;
vLeft, vRight, vTop, vBottom: TSingleArray;
procedure InitArray(aFirstNum: Integer; var aArray: TSingleArray);
var
i: Integer;
begin
for i := Low(aArray) to High(aArray) do
aArray[i] := aFirstNum + i;
end;
begin
SetLength(vLeft , aSize);
InitArray(aBegin , vLeft); SetLength(vBottom, aSize);
InitArray(aBegin + aSize - 1 , vBottom); SetLength(vRight , aSize);
InitArray(aBegin + (aSize - 1) * 2, vRight); SetLength(vTop , aSize);
InitArray(aBegin + (aSize - 1) * 3, vTop);
vTop[aSize - 1] := aBegin; for i := 0 to aSize - 1 do
begin
aData[i + aLayer][aLayer] := vLeft[i];
aData[aNum - aLayer - 1][aLayer + i] := vBottom[i];
aData[aNum - aLayer - i - 1][aNum - aLayer - 1] := vRight[i];
aData[aLayer][aNum - aLayer - i - 1] := vTop[i];
end; //end for
end;function TForm1.Matrix(aNum: Integer): TData;
var
vBegin, vLayer, I: integer;
begin
SetLength(Result, aNum, aNum);
I := aNum;
vBegin := 1;
vLayer := 0;
while I > 0 do
begin
Circle(vBegin, I, vLayer, aNum, Result);
Inc(vBegin, (I - 1) * 4);
Dec(I, 2);
Inc(vLayer);
end; //end while
end;procedure TForm1.btn1Click(Sender: TObject);
var
Dat: TData;
i, j: integer;
S: string;
Size: integer;
begin
if (Edt1.Text = '') then
begin
MessageBox(0, '输入矩阵数字。', '错误', MB_OK + MB_ICONWARNING +
MB_TOPMOST);
exit;
end;
Size := StrToInt(Edt1.Text);
Dat := Matrix(Size);
for i := 0 to Size - 1 do
begin
S := '';
for j := 0 to Size - 1 do
begin
S := S + IntToStr(Dat[i][j]) + ',';
end;
mmo1.Lines.Add(S);
end;
end;end.Unit1.dfm---object Form1: TForm1
Left = 256
Top = 125
Width = 355
Height = 281
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 16
Top = 224
Width = 35
Height = 13
Caption = '输入N:'
end
object mmo1: TMemo
Left = 16
Top = 16
Width = 297
Height = 193
TabOrder = 0
end
object btn1: TButton
Left = 240
Top = 216
Width = 75
Height = 25
Caption = '显示'
TabOrder = 1
OnClick = btn1Click
end
object edt1: TEdit
Left = 56
Top = 224
Width = 121
Height = 21
TabOrder = 2
end
end
2,25,40,39,38,37,18,
3,26,41,48,47,36,17,
4,27,42,49,46,35,16,
5,28,43,44,45,34,15,
6,29,30,31,32,33,14,
7,8,9,10,11,12,13,N = 81,28,27,26,25,24,23,22,
2,29,48,47,46,45,44,21,
3,30,49,60,59,58,43,20,
4,31,50,61,64,57,42,19,
5,32,51,62,63,56,41,18,
6,33,52,53,54,55,40,17,
7,34,35,36,37,38,39,16,
8,9,10,11,12,13,14,15,
N = 91,32,31,30,29,28,27,26,25,
2,33,56,55,54,53,52,51,24,
3,34,57,72,71,70,69,50,23,
4,35,58,73,80,79,68,49,22,
5,36,59,74,81,78,67,48,21,
6,37,60,75,76,77,66,47,20,
7,38,61,62,63,64,65,46,19,
8,39,40,41,42,43,44,45,18,
9,10,11,12,13,14,15,16,17,
N = 101,36,35,34,33,32,31,30,29,28,
2,37,64,63,62,61,60,59,58,27,
3,38,65,84,83,82,81,80,57,26,
4,39,66,85,96,95,94,79,56,25,
5,40,67,86,97,100,93,78,55,24,
6,41,68,87,98,99,92,77,54,23,
7,42,69,88,89,90,91,76,53,22,
8,43,70,71,72,73,74,75,52,21,
9,44,45,46,47,48,49,50,51,20,
10,11,12,13,14,15,16,17,18,19,
var aiRec:array of array of Integer;
iOutputCount,iX,iY,iXInc,iYInc:Integer;
str:string;
begin
SetLength(aiRec,n,n);
iX:=0;
iY:=0;
iXInc:=1;
iYInc:=0;
for iOutputCount:=1 to n*n do
begin
aiRec[iX,iY]:=iOutputCount; if (iX+iXInc>6) or (iY+iYInc>6) or (iX+iXInc<0) or (iY+iYInc<0) or
(aiRec[iX+iXInc,iY+iYInc]<>0) then
begin
case iXInc of
1:
begin
iXInc:=0;
iYInc:=1;
end;
-1:
begin
iXInc:=0;
iYInc:=-1;
end;
else
begin
case iYInc of
1:
begin
iXInc:=-1;
iYInc:=0;
end;
-1:
begin
iXInc:=1;
iYInc:=0;
end;
end;
end;
end;
end;
iX:=iX+iXInc;
iY:=iY+iYInc;
end; str:='';
for iY:=0 to n-1 do
begin
for iX:=0 to n-1 do
begin
str:=str+Format('%3d',[ aiRec[iX,iY]]);
end;
str:=str+#13#10;
end;
aiRec:=nil;
Result:=str;
end;调用示例:
Memo1.Text:=Circle(7); 结果: 当n=7
1 2 3 4 5 6 7
24 25 26 27 28 29 8
23 40 41 42 43 30 9
22 39 48 49 44 31 10
21 38 47 46 45 32 11
20 37 36 35 34 33 12
19 18 17 16 15 14 13另外,队列要对其,你应该把Memo的字体改为宋体。