02/10/2018, 14:44
Viết chương tìm nghiệm phương trình x1+x2+x3+…+xn = m
1. Đề bài nghiệm phương trình x1+x2+x3+…+xn = m cho trước n và m (n<=10, m<=20) Viết chương xuất ra các nghiệm phương trình x1+x2+x3+…+xn = m. nghiệm của phương trình là 1 số nguyên dương. Input – một dòng duy nhất gồm 2 số n, m Output – xuất ra tất cả ...
1. Đề bài nghiệm phương trình x1+x2+x3+…+xn = m
cho trước n và m (n<=10, m<=20) Viết chương xuất ra các nghiệm phương trình x1+x2+x3+…+xn = m. nghiệm của phương trình là 1 số nguyên dương.
Input
– một dòng duy nhất gồm 2 số n, m
Output
– xuất ra tất cả tập nghiệm, mỗi dòng gồm n số, và các tập nghiệm không là hoán vị của nhau
2. Hướng dẫn giải
Áp dụng thuật toán quay lui + đặt cận
3. Code tham khảo
const fi=';
type data=longint;
var
f:text;
m,n:data;
luu:array[0..1000] of data;
procedure xuat;
var i,j:data;
begin
for i:=1 to n do
write(luu[i],' ');
writeln;
end;
procedure try(i:data);//tim dap an cho nghiem thu i
var j,d:data;
begin
d:=m-(n-i);
for j:=d downto 1 do
begin
m:=m-j;
luu[i]:=j;
if (i<n) and (luu[i]<=luu[i-1]) then
try(i+1)
else
if (m=0) and (luu[i]<=luu[i-1]) then
xuat;
m:=m+j;
end;
end;
begin
assign(f,fi); reset(f);
readln(f,n,m);
close(f);
luu[0]:=high(data);
try(1);
readln;
end.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | const fi='; type data=longint; var f:text; m,n:data; luu:array[0..1000] of data; procedure xuat; var i,j:data; begin for i:=1 to n do write(luu[i],' '); writeln; end; procedure try(i:data);//tim dap an cho nghiem thu i var j,d:data; begin d:=m-(n-i); for j:=d downto 1 do begin m:=m-j; luu[i]:=j; if (i<n) and (luu[i]<=luu[i-1]) then try(i+1) else if (m=0) and (luu[i]<=luu[i-1]) then xuat; m:=m+j; end; end; begin assign(f,fi); reset(f); readln(f,n,m); close(f); luu[0]:=high(data); try(1); readln; end. |