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ả 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.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *