谁能帮忙做下这个算法,我会很感激的,这个题目就是“先输入两个数字,然后随机取25个数字,并让它成5行5列的显示出来”谢谢,你看了题目不要生气啊,是为了让你们起眼一下就看到。
解决方案 »
- 如果dxgrid 的keyfield 字段是 IDENTITY ,没保存没值
- 刚出来的小程序员一个月多钱?
- 在memo控件中怎样获得每行的索引?
- 两个小问题。急!!
- ★★★★★第二十五期:CSDN论坛秀-Delphi版-本期作秀:angle097113(深思不解)--[情侣婚纱秀]
- 【无边框窗体移动的问题】请教高人解决有关多个无边框窗口在响应鼠标事件时错乱的问题。
- 怎样通过计算得到地址来访问记录的域?(超难问题)
- 用ado连接excel数据库的问题,解决马上给分。
- 各位,非计算机专业如何应聘程序员工作?有何求职技巧?急
- 我的目录下有很多outlook的文件,是不是什么病毒,如readme.eml等
- 最近失败的很!!
- 为什么我写的组件没有在控件页上显示?
I:integer
begin
Randmize;
I:Random(100)
caption:=IntTostr(I)
end;
输入两个数 a,b
比较大小,
得到差 C
循环,从1到25
每次取得一个随机数(0到C)之间
加上MIN(a,b) 并同时按I确定显示值
能够写代码看看吗?
TNumbers = array of Integer;implementationfunction TForm1.GetRam(X1, X2, N: Integer): TNumbers;
var
X,I:Integer;
Nu1,Nu2:TNumbers;
N1,N2:Integer;
begin
if N>=1 then
begin
if X1>X2 then
begin
X:=X1;
X1:=X2;
X2:=X;
end;
if X2-X1<N then raise Exception.Create('get too more');
SetLength(Result,N);
X:=Trunc(Random*(X2-X1)+X1);
Result[0]:=X;
if (X2-X1-1)<>0 then
begin
N1:=Trunc((X-X1)*(N-1)/(X2-X1-1));
N2:=Trunc((X2-X-1)*(N-1)/(X2-X1-1));
if (N1+N2<N-1) then
begin
if N1<X-X1 then
Inc(N1)
else
Inc(N2);
end else if (N1+N2>N-1) then
begin
if N1>X-X1 then
Dec(N1)
else
Dec(N2);
end;
Nu1:=GetRam(X1,X,N1);
Nu2:=GetRam(X+1,X2,N2);
for I:=0 to N1-1 do
Result[I+1]:=Nu1[I];
for I:=0 to N2-1 do
Result[I+N1+1]:=Nu2[I];
X:=Result[N-1];
end;
end;
end;这个函数可以返回在X1<=X<X2的随机序列。返回值存放在动态数组中,这个函数经过了测试,应该没问题了。在X1,X2之间25个随机序列的调用方法
Nu:TNumbers; Nu:=GetRam(X1,X2,25);
var
Nu:TNumbers;
K,X:Integer; procedure DoGetRam(X1,X2,N:Integer);
var
N1,N2:Integer;
X:Integer;
begin
X:=Trunc(Random*(X2-X1)+X1);
Nu[K]:=X;
Inc(K);
if (X2-X1-1)<>0 then
begin
N1:=Trunc((X-X1)*(N-1)/(X2-X1-1));
N2:=Trunc((X2-X-1)*(N-1)/(X2-X1-1));
if (N1+N2<N-1) then
begin
if N1<X-X1 then
Inc(N1)
else
Inc(N2);
end else if (N1+N2>N-1) then
begin
if N1>X-X1 then
Dec(N1)
else
Dec(N2);
end;
if N1>0 then
DoGetRam(X1,X,N1);
if N2>0 then
DoGetRam(X+1,X2,N2);
end;
end;begin
if X1>X2 then
begin
X:=X1;
X1:=X2;
X2:=X;
end;
if X2-X1<N then raise Exception.Create('get too more');
K:=0;
SetLength(Nu,N);
DoGetRam(X1,X2,N);
Result:=Nu;
end;
var
Nu:TNumbers;
K,X:Integer; procedure DoGetRam(X1,X2,N:Integer);
var
N1,N2:Integer;
X:Integer;
begin
X:=Trunc(Random*(X2-X1)+X1);
Nu[K]:=X;
Inc(K);
if (X2-X1-1)<>0 then
begin
N1:=Trunc((X-X1)*(N-1)/(X2-X1-1));
N2:=Trunc((X2-X-1)*(N-1)/(X2-X1-1));
if (N1+N2<N-1) then
begin
if N1<X-X1 then
Inc(N1)
else
Inc(N2);
end else if (N1+N2>N-1) then
begin
if N1>X-X1 then
Dec(N1)
else
Dec(N2);
end;
if N1>0 then
DoGetRam(X1,X,N1);
if N2>0 then
DoGetRam(X+1,X2,N2);
end;
end;begin
if X1>X2 then
begin
X:=X1;
X1:=X2;
X2:=X;
end;
if X2-X1<N then raise Exception.Create('get too more');
if N>0 then
begin
K:=0;
SetLength(Nu,N);
DoGetRam(X1,X2,N);
Result:=Nu;
end else
Result:=nil;
end;
你果然是高手。谢谢你的帮忙!
真是热心快肠啊~,这才叫高手!