求大整数n被划分成K个的小整数的算法不好意思,我第一次提问,没说明白.我真正想求的是:一个整数n,(n是15到75的数),把n划分成6个互不相同的小整数之和,要求求出这样的6个小整数,写出算法思
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/23 09:50:44
求大整数n被划分成K个的小整数的算法不好意思,我第一次提问,没说明白.我真正想求的是:一个整数n,(n是15到75的数),把n划分成6个互不相同的小整数之和,要求求出这样的6个小整数,写出算法思
求大整数n被划分成K个的小整数的算法
不好意思,我第一次提问,没说明白.
我真正想求的是:
一个整数n,(n是15到75的数),把n划分成6个互不相同的小整数之和,要求求出这样的6个小整数,写出算法思想,最好能用delphi写出来.
不知道我现在这样说,您能明白吗?
求大整数n被划分成K个的小整数的算法不好意思,我第一次提问,没说明白.我真正想求的是:一个整数n,(n是15到75的数),把n划分成6个互不相同的小整数之和,要求求出这样的6个小整数,写出算法思
我先把代码和结果帖出来
你不知道原理的话我可以再解释
函数:
//把一个正整数Number分成Parts个正整数,要求不重复
function DivideNumber(Number, Parts: integer): string;
var
MinNumber, BaseNumber, i: integer;
begin
result := '';
if Number < 1 then exit;
if Parts < 1 then exit;
MinNumber := (Parts - 1) * Parts div 2;
if Number < MinNumber then exit;
BaseNumber := (Number - MinNumber) div Parts;
for i := 1 to Parts - 1 do
result := result + IntToStr(BaseNumber + i - 1) + ',';
result := result + IntToStr(Number - MinNumber - BaseNumber * Parts + BaseNumber + Parts - 1) + ',';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
Memo1.Clear;
for i := 15 to 57 do
Memo1.Lines.Add(IntToStr(i) + ': ' + DivideNumber(i, 6));
end;
运行结果如下,你可以一个个验证看看
15: 0,1,2,3,4,5
16: 0,1,2,3,4,6
17: 0,1,2,3,4,7
18: 0,1,2,3,4,8
19: 0,1,2,3,4,9
20: 0,1,2,3,4,10
21: 1,2,3,4,5,6
22: 1,2,3,4,5,7
23: 1,2,3,4,5,8
24: 1,2,3,4,5,9
25: 1,2,3,4,5,10
26: 1,2,3,4,5,11
27: 2,3,4,5,6,7
28: 2,3,4,5,6,8
29: 2,3,4,5,6,9
30: 2,3,4,5,6,10
31: 2,3,4,5,6,11
32: 2,3,4,5,6,12
33: 3,4,5,6,7,8
34: 3,4,5,6,7,9
35: 3,4,5,6,7,10
36: 3,4,5,6,7,11
37: 3,4,5,6,7,12
38: 3,4,5,6,7,13
39: 4,5,6,7,8,9
40: 4,5,6,7,8,10
41: 4,5,6,7,8,11
42: 4,5,6,7,8,12
43: 4,5,6,7,8,13
44: 4,5,6,7,8,14
45: 5,6,7,8,9,10
46: 5,6,7,8,9,11
47: 5,6,7,8,9,12
48: 5,6,7,8,9,13
49: 5,6,7,8,9,14
50: 5,6,7,8,9,15
51: 6,7,8,9,10,11
52: 6,7,8,9,10,12
53: 6,7,8,9,10,13
54: 6,7,8,9,10,14
55: 6,7,8,9,10,15
56: 6,7,8,9,10,16
57: 7,8,9,10,11,12
不过我不知道这个问题有什么意义
最简单的办法是先找到0,1,2,3,4这五个数字
然后把剩下的算做第六个就是了
下限是15的话,说明第六个数字最少也是5
不会有问题