主题:整数分解^来者有分^整数分解^来者有分^整数分解^来者有分^整数分解^来者有分^整数分解^来者有分
593170024
[专家分:500] 发布于 2010-09-23 16:15:00
题目描述:一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:
15=1+2+3+4+5
15=4+5+6
15=7+8
请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。
输入数据:一个正整数,以命令行参数的形式提供给程序。
输出数据:在标准输出上打印出符合题目描述的全部正整数序列,每行一个序列,每个序列都从该序列的最小正整数开始、以从小到大的顺序打印。如果结果有多个序列,按各序列的最小正整数的大小从小到大打印各序列。此外,序列不允许重复,序列内的整数用一个空格分隔。如果没有符合要求的序列,输出“NONE”。
例如,对于15,其输出结果是:
1 2 3 4 5
4 5 6
7 8
最后更新于:2010-10-07 00:43:00
回复列表 (共20个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2010-09-23 22:30:00
呵呵,我不是在:
http://bbs.pfan.cn/post-347878.html
里回復過么:)
板凳
593170024 [专家分:500] 发布于 2010-09-24 19:20:00
除以奇数A,如果整除,且商为B,则输出B-A/2和B+A/2
除以偶数A,如果余1,且商为B,则输出B-A/2+1和B+A/2
除数从待求数K的1/2开始到2结束递减
我看不懂
3 楼
593170024 [专家分:500] 发布于 2010-09-24 19:22:00
给个公式
4 楼
cgl_lgs [专家分:21040] 发布于 2010-09-24 20:13:00
除以奇数A,如果整除,且商为B,则输出B-A/2到B+A/2
除以偶数A,如果余1,且商为B,则输出B-A/2+1到B+A/2
除数从待求数K的1/2开始到2结束递减(這個除數就是上面兩個的A)
A從K/2到2,步長為-1
如果A為奇數,則:
如果K/A整除,且商为B,则输出B-A/2到B+A/2
否則
如果K/A余1,且商为B,则输出B-A/2+1到B+A/2
END;
END;
5 楼
593170024 [专家分:500] 发布于 2010-09-28 12:57:00
A從K/2到2,步長為-1
如果A為奇數,則:
如果K/A整除,且商为B,则输出B-A/2到B+A/2
否則
如果K/A余1,且商为B,则输出B-A/2+1到B+A/2
END;
END;
且商为B?
是吗?
if (k mod a = 0) and (b=...) then
还是 if (k mod a = 0) then
b=k /a
?
6 楼
cgl_lgs [专家分:21040] 发布于 2010-09-29 17:06:00
if (k mod a = 0) then
b=k /a
7 楼
593170024 [专家分:500] 发布于 2010-10-02 23:18:00
var
a,k,b:longint;
begin
readln(k);
for a:= k div 2 downto 1 do
b:=0;
begin
if (k mod a =0) then
begin
b:=k div a;
writeln(b-a div 2,b+a div 2);
end
else
begin
if k mod a =1 then
begin
b:=k div a;
writeln(b-a div 2+1,b+a div 2);
end;
end;
end;
end.
我输入15 为什么是
1515
可能是我错了,应该是
var
a,k:longint;
b:real
begin
readln(k);
for a:= k div 2 downto 1 do
b:=0;
begin
if (k mod a =0) then
begin
b:=k / a;
writeln(b-a / 2,b+a / 2);
end
else
begin
if k mod a =1 then
begin
b:=k / a;
writeln(b-a / 2+1,b+a / 2);
end;
end;
end;
end.
可是还是有问题
输出还是不对
8 楼
cgl_lgs [专家分:21040] 发布于 2010-10-02 23:28:00
输出B-A/2[b]到[/b]B+A/2
9 楼
593170024 [专家分:500] 发布于 2010-10-02 23:30:00
我知道,1个for循环解决,但是数字不对
10 楼
cgl_lgs [专家分:21040] 发布于 2010-10-03 23:51:00
for a:= k div 2 downto 1 do
改為:
for a:= k div 2 downto 2 do
我来回复