Cho dãy a1, a2,…,an (với ai là số tự nhiên). Tìm các dãy con đó có tổng bằng S.
Input
(dữ liệu nhập) cho trong tập tin BAI02.INP
gồm hai dòng:
-
Dòng đầu tiên là số nguyên n (1<n<30) và số S (0<S<1000) cách
nhau bởi một khoảng trắng.
-
Dòng thứ hai gồm n số của dãy số a1,
a2,…,an, mỗi số cách nhau một khoảng trắng.
Output
(dữ liệu xuất) ghi vào tập tin BAI02.OUT
gồm nhiều dòng, mỗi dòng ghi một phương án các giá trị ai sao cho tổng
bằng S. Trong trường hợp không tìm
được thì ghi là “khong co day con co tong
bang S (ghi gia tri cua S)”.
Ví dụ:
BAI02.INP |
BAI02.OUT |
7 26 4 2 5 1 6 8 3 |
4 2 5 1 6 8 4 5 6 8 3 |
program daycon_tongbangS;
var n,s,tong: integer;
x, a: array[1..40] of integer;
fi, fo: text;
procedure Nhap;
var i:byte;
begin
assign(fi,'BAI02.INP'); reset(fi);
readln(fi,n,s);
for i:=1 to n do read(fi,a[i]);
close(fi);
end;
procedure Xuat;
var k:byte;
begin
for k:=1 to n do
if x[k] = 1 then write(fo,a[k],' ');
writeln(fo);
end;
procedure try(i:byte);
var j:byte;
begin
for j:=1 downto 0 do
begin
x[i]:=j;
tong:=tong+x[i]*a[i];
if tong = s then Xuat
else
if (tong < s) and (i<n) then try(i+1);
tong:=tong-x[i]*a[i];
end;
end;
begin
Nhap;
assign(fo,'BAI02.OUT'); rewrite(fo);
tong:=0;
try(1);
close(fo);
end.
Đăng nhận xét