如何求3位数的和数值 ( 积分: 50 )

  • 主题发起人 主题发起人 squarevictory
  • 开始时间 开始时间
S

squarevictory

Unregistered / Unconfirmed
GUEST, unregistred user!
例:
0:000
1:001,010,100
2:002,011,020,101,110,200
最好用C# ,PASCAL 也行
 
function GetXYZ(I: Integer): string;
var
X, Y, Z: Integer;
S: string;
begin
Result := '';
if I > 27 then
Exit;
//999 = 27
with TStringList.Createdo
try
for X := 0 to 9do
for Y := 0 to 9do
for Z := 0 to 9do
if X + Y + Z = I then
begin
S := Format('%d%d%d', [X, Y, Z]);
if IndexOf(S) = -1 then
Add(S);
end;
Result := CommaText;
finally
Free;
end;
end;

下面这个效率应该会好点,不过在这个Core的年代,这点点效率好象不很重要来的
function GetXYZ(I: Integer): string;
var
S: string;
B, E, X, Y, Z: Integer;
begin
Result := '';
if I > 27 then
Exit;
B := 0;
E := 9;
S := Format('%.2d', );
case S[1] of
'0': E := I;
'2': B := 2 + StrToInt(S[2]);
end;
with TStringList.Createdo
try
for X := B to Edo
for Y := B to Edo
begin
//if X + Y > I then
Break;
//要这行吗,效率会更高吗?
for Z := B to Edo
if X + Y + Z = I then
begin
S := Format('%d%d%d', [X, Y, Z]);
Add(S);
end;
end;
Result := CommaText;
finally
Free;
end;
end;
 
??什么意思?
求3位数的和?是100-999之间的和吗?
还是....
 
ANiDelphi:
你这种算法确实可以实现,不过效率太低了,不管如何都要判断9的3次方次。
如果是0的话,其实只有一种就是000,那么也要循环个9^3,太浪费资源了
 
楼主三位数的和是什么意思啊?
 
我也不知道怎么描述最准确,看例子可以找到规律
其实ANiDelphi的答案已经实现了,不过算法可以再优化点
求数字的3位和数值组合
例:
0:000
1:001,010,100
2:002,011,020,101,110,200
.
.
.
n:.....
n<=27(N为和数值)
 
function m(const v : Integer):Integer;
begin
if v > 9 then
Result := 9
else
Result := v;
end;

function calc(const v : Integer):string;
var
i, j: Integer;
begin
Result := '';
for i := 0 to m(v)do
for j := 0 to m(v - i)do
if m(v - i - j) + i + j = v then
Result := Result + Format('%d%d%d,', [i, j, m(v - i - j)]);
if Result <> '' then
Delete(Result, Length(Result), 1);
end;
 
接受答案了.
 
后退
顶部