回 帖 发 新 帖 刷新版面

主题:整数分解^来者有分^整数分解^来者有分^整数分解^来者有分^整数分解^来者有分^整数分解^来者有分

题目描述:一个正整数有可能可以被表示为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

回复列表 (共20个回复)

沙发

呵呵,我不是在:
http://bbs.pfan.cn/post-347878.html
里回復過么:)

板凳

除以奇数A,如果整除,且商为B,则输出B-A/2和B+A/2
除以偶数A,如果余1,且商为B,则输出B-A/2+1和B+A/2
除数从待求数K的1/2开始到2结束递减

我看不懂

3 楼

给个公式

4 楼

除以奇数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 楼

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 楼

if (k mod a = 0) then
     b=k /a

7 楼

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 楼

输出B-A/2[b]到[/b]B+A/2

9 楼

我知道,1个for循环解决,但是数字不对

10 楼

for a:= k div 2 downto 1 do
改為:
for a:= k div 2 downto 2 do

我来回复

您尚未登录,请登录后再回复。点此登录或注册