寻求一个算法

zip6038717 2008-10-12 04:33:19
我要计算0-9之间任意3个数相加等于某一个值的组合数,其中数字没有没有顺序,只要一样就算一种组合。比如只如果是6 则123,321,132等只算一个组合
...全文
129 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jack_Yin 2008-10-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ideation_shang 的回复:]
噢 是我理解错误,以为不能重复
[/Quote]
我也错了
以为不能重复
Jack_Yin 2008-10-13
  • 打赏
  • 举报
回复
一个思路:
1. 首先确定 三个数相加的和(用s表示)的范围是 3到9 这样 最外层循环 为 3到9 用 变量s 控制循环(for s:= 3 to 9)
2. 定义 变量 first second third 分别表示 三个数
则first 范围是 0 到 s-1,
second 范围是first+1到i-1 并且 if second > i-2 then break;
third 范围是 second+1 到 i-1 并且 if third > i-1 then break;
3. 用这个四重循环把s 以及first second third 找出来

ideation_shang 2008-10-13
  • 打赏
  • 举报
回复
噢 是我理解错误,以为不能重复
zip6038717 2008-10-13
  • 打赏
  • 举报
回复
谢谢 ideation_shang 基础上修改

function TForm1.CalcNums(Num: Integer): Integer;
var
I, J, K: Integer;
begin
Result := 0;
for I := 0 to (Num div 3) do
for J := I to 9 do
for K := 9 downto J do
begin
if I + J + K = Num then
begin
Memo1.Lines.Add(Format('%d%d%d', [I, J, K]));
Inc(Result);
end;
end;
Memo1.Lines.Add(IntToStr(Result));
end;
zip6038717 2008-10-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ideation_shang 的回复:]
Delphi(Pascal) code
var
sum, i, j, k, a, b, c: Integer;
begin
sum:=6;
for i:=0 to 9 do
begin
a:=i;
for j:=a+1 to 9 do
begin
b:=j;
for k:=b+1 to 9 do
begin
c:=k;
if a+b+c=sum then
Memo1.Lines.Add(Format('%d%d%d',[a,b,c]));
end;
end;
end;
end;
[/Quote]

会漏掉 114,222 这样的数字组合
willflyz 2008-10-12
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
str:String;
i,j,k,l: integer;
function orderstr(p1,p2,p3:integer):String;
var
s,stemp:String;
i,j:integer;
begin
s := inttostr(p1)+inttostr(p2)+inttostr(p3);
for I := 1 to length(s) do
begin
stemp := s[i];
for j:=i+1 to length(s) do
if s[j] < stemp then
begin
s[i] := s[j];
s[j] := stemp[1];
end;
end;
Result := s;
end;
begin
for i := 0 to 9 do
for j := 0 to 9 do
for k := 0 to 9 do
begin
if i+j+k = 6 then
begin
str := orderstr(i,j,k);
for l := 0 to memo1.Lines.Count - 1 do
if str = memo1.Lines.Strings[l] then
str := '';
if length(str) > 0 then
memo1.Lines.Add(str);
end;
end;
end;
ideation_shang 2008-10-12
  • 打赏
  • 举报
回复

var
sum, i, j, k, a, b, c: Integer;
begin
sum:=6;
for i:=0 to 9 do
begin
a:=i;
for j:=a+1 to 9 do
begin
b:=j;
for k:=b+1 to 9 do
begin
c:=k;
if a+b+c=sum then
Memo1.Lines.Add(Format('%d%d%d',[a,b,c]));
end;
end;
end;
end;
喝口水 2008-10-12
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,k:integer;
begin
for i:=1 to 9 do //不知道第一位能不能是零,如果能的话,把1改成0即可
for j:=0 to 9 do
begin
if j=i then continue;
for k:=0 to 9 do
begin
if (k=i)or(k=j) then continue;
memo1.Lines.Add(inttostr(i)+inttostr(j)+inttostr(k));
end;
end;
end;
喝口水 2008-10-12
  • 打赏
  • 举报
回复
能不能是012

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧