<span style="font-family: Arial, Helvetica, sans-serif;">const</span>
maxn=100000;
var
a:array [1..maxn] of longint;
i,j,n,m,p,s,tot:longint;
begin
assign(input,'sum.in'); reset(input);
assign(output,'sum.out'); rewrite(output);
readln(n);
while 1=1 do
begin
inc(i);
s:=s+i;
if s<n then continue;
if s=n then
begin
writeln(i);
break;
end;
if s>n then
begin
if (s-n) mod 2=1 then continue;
p:=s-n;
for j:=i downto 1 do
if (j*2)<=p then
begin
inc(tot);
a[tot]:=j;
p:=p-j*2;
end;
if p=0 then
begin
writeln(i);
break;
end;
tot:=0;
end;
end;
for i:=tot downto 1 do
writeln(a[i]);
close(input); close(output);
end.
hjy
一开始全部加起来,如果比要求的大就可以判断,如果差是偶数,那么就一定可以的。
我的程序还复杂了。。。。。