PDA

View Full Version : giúp em bài Pascal này với!



Giang94
06-10-2009, 19:17
Cho số tự nhiên n (0<n<100). Hãy liệt kê tất cả các cách biểu diễn n thành tổng các số tự nhiên không lớn hơn n (VD: 3 = 3+0 = 2+1 = 1+1+1). hai cách biểu diễn coi là giống nhau khi các số hạng của nó như nhau, chỉ khác thứ tự (VD: 5=2+3=3+2 thì coi là giống nhau).
Yêu cầu:
Input: Một dòng biểu diễn số tự nhiên n
Output: Mỗi dòng là một cách biễu diễn, dòng cuối cùng là số cách biễu diễn.
Ai giúp giùm Thanks rất nhiều

bld
07-10-2009, 15:28
quay lui đi bạn, mình biết có 1 cách QHD mà quên mất công thức rồi ...

hang_vt
07-10-2009, 16:30
const fi='phantichs.inp';
fo='phantichs.out';

var f:text;
x:array[0..30] of byte;
t:array[0..30] of byte;
s:byte;

procedure inp;
begin
assign(f,fi);
reset(f);
readln(f,s);
close(f);
end;

procedure pri(n:byte);
var i:byte;
begin
for i:=1 to n do
write(f,x[i],' ');
writeln(f);
end;

procedure try(i:byte);
var j:byte;
begin
for j:=x[i-1] to (s-t[i-1]) div 2 do
begin
x[i]:=j;
t[i]:=t[i-1]+x[i];
try(i+1);
end;
x[i]:=s-t[i-1];
pri(i);
end;

begin
inp;
assign(f,fo);
rewrite(f);
x[0]:=1;
t[0]:=0;
try(1);
close(f);
end.