回 帖 发 新 帖 刷新版面

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

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

11 楼

输出是这个

-3.5714285714285721E-0001 5.6428571428571428E+0000
 5.0000000000000000E-0001 5.5000000000000000E+0000
 3.5000000000000000E+0000 6.5000000000000000E+0000
 7.5000000000000000E+0000 8.5000000000000000E+0000

我晕~

每次都是这个

不知是不是这样
不是  B-A/2+1
是 (b-a)\2 +1

12 楼

[quote]输出是这个

-3.5714285714285721E-0001 5.6428571428571428E+0000
 5.0000000000000000E-0001 5.5000000000000000E+0000
 3.5000000000000000E+0000 6.5000000000000000E+0000
 7.5000000000000000E+0000 8.5000000000000000E+0000

我晕~

每次都是这个

不知是不是这样
不是  B-A/2+1
是 (b-a)\2 +1
?[/quote]

13 楼

这次这样改了
var
a,k:longint;
b:real
begin
        readln(k);
        for a:= k div 2 downto 2 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.

我吐血

变这样了
-1.42857142857143E+000 4.57142857142857E+000
-1.00000000000000E+000 4.00000000000000E+000
 1.00000000000000E+000 4.00000000000000E+000
 3.75000000000000E+000 4.75000000000000E+000

14 楼

b:real
改為:
b:longint

15 楼

这样应是这个
var
a,k,b:longint;
begin
        assign(output,'shuitimu3.out');
        rewrite(output);
        readln(k);
        for a:= k div 2 downto 1 do
        begin
                if (k mod a =0) then
                begin
                        b:=k div a;
                        writeln((b-a) / 2,(b+a)  / 2);
                end
                else
                begin
                        if k mod a =1 then
                        begin
                                b:=k div a;
                                writeln((b-a) / 2+1,(b+a) / 2);
                        end;
                end;
        end;
        close(output);
end.

/是实型
打印出这个
-1.5000000000000000E+0000 4.5000000000000000E+0000
-1.0000000000000000E+0000 4.0000000000000000E+0000
 1.0000000000000000E+0000 4.0000000000000000E+0000
 3.5000000000000000E+0000 4.5000000000000000E+0000
 7.0000000000000000E+0000 8.0000000000000000E+0000

16 楼

不加括号是这个
-1.5000000000000000E+0000 4.5000000000000000E+0000
-1.0000000000000000E+0000 4.0000000000000000E+0000
 1.0000000000000000E+0000 4.0000000000000000E+0000
 3.5000000000000000E+0000 4.5000000000000000E+0000
 7.0000000000000000E+0000 8.0000000000000000E+0000

17 楼

我12樓不是說了么:
是(b-a)\2 +1
也就是說要做整除操作:)

18 楼

还是看不懂

19 楼

麻烦
var i,k,n,m,t:longint;
    f:boolean;
begin
  readln(n);
  f:=false;
  for i:=1 to (n div 2 +1) do
  begin
    t:=i;
    k:=i;
    while k<n do
    begin
      t:=t+1;
      k:=k+t;
    end;
    if k=n then
    begin
      f:=true;   
      for m:=i to t do write(i,' ');
      writeln;
    end;
  end;
  if not f then writeln('None');
end.

20 楼

穷举就够了

我来回复

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