Trở về đầu
Mời các bạn Download code tại: Click here
1. File Input:Click here
- Dòng đầu tiên gồm hai số n và k.
- Dòng tiếp theo ghi n số là số kẹo mỗi gói.
2. File Output
- In ra tất cả các cách phân chia n gói kẹo thành k phần để số lượng kẹo các phần bằng nhau (không được bóc gói kẹo).
const fi = 'CHIAKEOQUAYLUI.INP';
fo = 'CHIAKEOQUAYLUI.OUT';
MAXN = 20;
MAXK = 20;
var f: text;
n, k: integer;
a, soluongkeo: array [1..MAXN] of integer;
s: array [1..MAXK] of integer; //so luong keo cua phan thu j
dem: integer;
procedure Nhap;
var i: integer;
begin
assign(f, fi); reset(f);
readln(f, n, k);
for i:= 1 to n do
read(f, soluongkeo[i]);
close(f);
dem:= 0;
for i:= 1 to k do
s[i]:= 0;
end;
procedure InKQ;
var i, j: integer;
begin
for i:= 2 to k do
if s[i] <> s[1] then exit;
inc(dem);
writeln(f, 'Cach ', dem:3, ': ');
for j:= 1 to k do
begin
write(f, 'Phan ', j, ': ');
for i:= 1 to n do
if a[i] = j then
write(f, soluongkeo[i], ' ');
writeln(f);
end;
writeln(f);
end;
procedure Try2(i: integer); // dien gia tri cho vi tri thu i
var j: integer;
begin
for j:= 1 to k do
begin
a[i]:= j;
s[j]:= s[j] + soluongkeo[i];
if i = n then InKQ
else Try2(i+1);
s[j]:= s[j] - soluongkeo[i];
end;
end;
BEGIN
Nhap;
assign(f, fo); rewrite(f);
Try2(1);
close(f);
END.