操,我自己玩还不一定每次都能玩出来。
解决方案 »
- 排序(比较复杂)
- xml schema 能实现属性和元素相互约束吗?
- 一個轉換的問題
- ????????????[Microsoft][ODBC SQL Server Driver]超时已过期???
- datagrid问题?---关于列宽,急急急急,各位高手帮帮忙
- 发布一个快速、功能全面、支持数据绑定的表格/打印控件,欢迎试用!
- 未处理的“System.Xml.XmlException”类型的异常出现在 system.xml.dll 中。
- c#写的windows service 老是意外停止,求帮忙
- 请教各位水晶报表的问题,请帮忙,谢谢!!!!
- 关于dataGRID绑定数据的问题请教
- AspNetPager分页时SiteMapPath怎么用啊?
- 做生日提醒遇到问题
145
627
893 一步步变成
123
456
789而已[code=Delphi(Pascal)]
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormShow(Sender: TObject);
var
i:Integer;
A:array[0..2,0..2] of Integer; function SwapInteger(i1,j1,i2,j2:Integer):Boolean;
var
T:Integer;
Value:Integer;
begin
Value:=A[i2,j2]-1;
if (Value<A[i1,j1]-1) and (Value div 3=i2) and (Value mod 3=j2) then
begin
// 比当前小的而且是已经排好位置的值不允许换
Result:=false;
Exit;
end;
T:=A[i1,j1];
A[i1,j1]:=A[i2,j2];
A[i2,j2]:=T;
Result:=true;
end; procedure Print;
var
i,j:Integer;
S:String;
begin
for i:=0 to 2 do
begin
S:='';
for j:=0 to 2 do
S:=S+IntToStr(A[i,j])+' ';
Memo1.Lines.Add(S);
end;
Memo1.Lines.Add('--------');
end; procedure Change(TestValue:Integer);
var
i,j:Integer;
Changed:Boolean;
Value:Integer;
label
NEXT;
begin
Value:=TestValue-1;
while true do
begin
NEXT:
Changed:=false;
for i:=0 to 2 do
for j:=0 to 2 do
if A[i,j]=TestValue then
begin
if (i<Value div 3) and (i<2) then
begin
// 右移
Changed:=SwapInteger(i,j,i+1,j);
if Changed then
Print;
end;
if (i>Value div 3) and (i>0) then
begin
// 左移
Changed:=SwapInteger(i,j,i-1,j);
if Changed then
Print;
end;
if (j<Value mod 3) and (j<2) then
begin
// 上移
Changed:=SwapInteger(i,j,i,j+1);
if Changed then
Print;
end;
if (j>Value mod 3) and (j>0) then
begin
// 下移
Changed:=SwapInteger(i,j,i,j-1);
if Changed then
Print;
end;
if not Changed then
Exit
else
goto NEXT;
end;
end;
end;begin
A[0,0]:=7;
A[0,1]:=3;
A[0,2]:=5;
A[1,0]:=1;
A[1,1]:=6;
A[1,2]:=8;
A[2,0]:=2;
A[2,1]:=4;
A[2,2]:=9; Memo1.ScrollBars:=ssBoth;
Memo1.Clear;
Print; for i:=1 to 9 do
Change(i);
end;
end./code]