求大整数n被划分成K个的小整数的算法
来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:数学作业 时间:2024/04/26 01:28:31
求大整数n被划分成K个的小整数的算法
不好意思,我第一次提问,没说明白.
我真正想求的是:
一个整数n,(n是15到75的数),把n划分成6个互不相同的小整数之和,要求求出这样的6个小整数,写出算法思想,最好能用delphi写出来.
不知道我现在这样说,您能明白吗?
不好意思,我第一次提问,没说明白.
我真正想求的是:
一个整数n,(n是15到75的数),把n划分成6个互不相同的小整数之和,要求求出这样的6个小整数,写出算法思想,最好能用delphi写出来.
不知道我现在这样说,您能明白吗?
我先把代码和结果帖出来
你不知道原理的话我可以再解释
函数:
//把一个正整数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
不会有问题
你不知道原理的话我可以再解释
函数:
//把一个正整数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
不会有问题
求算法:把一个数M分成N个整数...
设n和k为>1的整数,n<2^k,求证:存在2k个整数,将他们任意分成两组,则总有一组有若干个数的和被N整除
如图1.正方形ABCD的边长为12,划分成12*12个小正方形,将边长为n(n为整数,且2≤n ≤11)的黑白两色正方形
分别用流程图和伪代码的方法描述求找n个整数中最大值的算法?
求“判断整数n(n>2)是否为质数”的算法!
求整数n(n>=0)阶乘的算法如下,其时间复杂度:
将15分成两个数,(两个整数之和)使它们的积为整数K.试探求:
将15分成两个数,(两个整数之和).使它们的积为整数k,试探求:
求算法问题:一个数组a中有n个整数,如何设计算法,使其中相同的数只有一个.并给出程序.
试编写算法,对连续输入的n个整数,找出其中最大值和最小值(
设计算法,求出任意输入的n个整数中的最大值!
有几个固定的整数(不重复)和一个随机整数 求比这个随机数大或相等的最小整数值.望高手赐教程序设计算法