pascal划分正整数
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/10 20:34:49
pascal划分正整数
输入一个正整数,拆分成正整数的和,求所有的情况.注意是情况,不是情况的个数.
如:输入5,输出
5=1+1+1+1+1
5=1+1+1+2
5=1+1+3
5=1+2+2
5=1+4
5=2+3
5=5
输入一个正整数,拆分成正整数的和,求所有的情况.注意是情况,不是情况的个数.
如:输入5,输出
5=1+1+1+1+1
5=1+1+1+2
5=1+1+3
5=1+2+2
5=1+4
5=2+3
5=5
你这里是不是有个规则,就是拆分后的数,是从小到大排列的?
函数如下:
function BreakNum(const AShowList: TStrings; const ANum: Integer): TStrings;
var
List: TStringList; //全局字符串列表,用于保存显示
//子函数,递归求解
procedure Break(const AStr: string; const ANum: Integer; Max: Integer);
var
i: Integer;
b1, b2: Integer;
begin
List.Add(Format('%s%d', [AStr, ANum]));
for i := 1 to ANum div 2 do
begin
b1 := i;
if b1 < Max then Continue;
if b1 > Max then Max := b1;
b2 := ANum - i;
if (b2 = Max) then
List.Add(Format('%s%d+%d', [AStr, b1, b2]))
else if (b2 > Max) then
Break(Format('%s%d+', [AStr, b1]), b2, Max);
end;
end;
begin
List := TStringList.Create;
try
List.Sorted := True; //进行排序,注释掉后则不排序
Break(Format('%d=', [ANum]), ANum, 0);
AShowList.Assign(List);
finally
List.Free;
end;
end;
调用时,可以在窗口上添加控件Memo1、TButton1、TEdit1.
双击Button1加入如下代码即可:
BreakNum(Memo1.Lines, StrToIntDef(Edit1.Text, 0));
10的运行结果如下:
10=1+1+1+1+1+1+1+1+1+1
10=1+1+1+1+1+1+1+1+2
10=1+1+1+1+1+1+1+3
10=1+1+1+1+1+1+2+2
10=1+1+1+1+1+1+4
10=1+1+1+1+1+2+3
10=1+1+1+1+1+5
10=1+1+1+1+2+2+2
10=1+1+1+1+2+4
10=1+1+1+1+3+3
10=1+1+1+1+6
10=1+1+1+2+2+3
10=1+1+1+2+5
10=1+1+1+3+4
10=1+1+1+7
10=1+1+2+2+2+2
10=1+1+2+2+4
10=1+1+2+3+3
10=1+1+2+6
10=1+1+3+5
10=1+1+4+4
10=1+1+8
10=1+2+2+2+3
10=1+2+2+5
10=1+2+3+4
10=1+2+7
10=1+3+3+3
10=1+3+6
10=1+4+5
10=1+9
10=10
10=2+2+2+2+2
10=2+2+2+4
10=2+2+3+3
10=2+2+6
10=2+3+5
10=2+4+4
10=2+8
10=3+3+4
10=3+7
10=4+6
10=5+5
函数如下:
function BreakNum(const AShowList: TStrings; const ANum: Integer): TStrings;
var
List: TStringList; //全局字符串列表,用于保存显示
//子函数,递归求解
procedure Break(const AStr: string; const ANum: Integer; Max: Integer);
var
i: Integer;
b1, b2: Integer;
begin
List.Add(Format('%s%d', [AStr, ANum]));
for i := 1 to ANum div 2 do
begin
b1 := i;
if b1 < Max then Continue;
if b1 > Max then Max := b1;
b2 := ANum - i;
if (b2 = Max) then
List.Add(Format('%s%d+%d', [AStr, b1, b2]))
else if (b2 > Max) then
Break(Format('%s%d+', [AStr, b1]), b2, Max);
end;
end;
begin
List := TStringList.Create;
try
List.Sorted := True; //进行排序,注释掉后则不排序
Break(Format('%d=', [ANum]), ANum, 0);
AShowList.Assign(List);
finally
List.Free;
end;
end;
调用时,可以在窗口上添加控件Memo1、TButton1、TEdit1.
双击Button1加入如下代码即可:
BreakNum(Memo1.Lines, StrToIntDef(Edit1.Text, 0));
10的运行结果如下:
10=1+1+1+1+1+1+1+1+1+1
10=1+1+1+1+1+1+1+1+2
10=1+1+1+1+1+1+1+3
10=1+1+1+1+1+1+2+2
10=1+1+1+1+1+1+4
10=1+1+1+1+1+2+3
10=1+1+1+1+1+5
10=1+1+1+1+2+2+2
10=1+1+1+1+2+4
10=1+1+1+1+3+3
10=1+1+1+1+6
10=1+1+1+2+2+3
10=1+1+1+2+5
10=1+1+1+3+4
10=1+1+1+7
10=1+1+2+2+2+2
10=1+1+2+2+4
10=1+1+2+3+3
10=1+1+2+6
10=1+1+3+5
10=1+1+4+4
10=1+1+8
10=1+2+2+2+3
10=1+2+2+5
10=1+2+3+4
10=1+2+7
10=1+3+3+3
10=1+3+6
10=1+4+5
10=1+9
10=10
10=2+2+2+2+2
10=2+2+2+4
10=2+2+3+3
10=2+2+6
10=2+3+5
10=2+4+4
10=2+8
10=3+3+4
10=3+7
10=4+6
10=5+5
pascal划分正整数
Pascal问题:均匀划分
pascal 输入30个正整数,计算它们的和,平方和
pascal语言:输入一个正整数,计算它各数位之和
pascal 题,输入5个正整数求它们的最大公约数.
pascal求正整数2到100之间的完全数
用Free Pascal 做 求两个正整数的最大公约数
pascal pascal pascal!
求数的划分记忆化搜索的方法 PASCAL语言
pascal输入一个n位的正整数,输出由这n个数字组成的最大正整数.
求助一道pascal高精度乘法题:输入两个正整数m、n,输出他们的积.( 1
pascal 勾股定理 要求定义一个布尔函数判断一组正整数是否为勾股数.