BÀI TẬP 65: Phân tích thành tổng (Câu 1 – Đề thi Tin học trẻ cấp Tỉnh An Giang 2017-2018)

phân tích thành tổng

Cho một số tự nhiên n (3<=n<=1000). Phân tích n thành các tổng sao cho mỗi tổng gồm đúng k số hạng. Các số hạng của tổng phải lớn hơn 0 và trong mỗi tổng không có 2 số hạng giống nhau. Hai tổng được gọi là khác nhau nếu chúng khác nhau ít nhất một số hạng.

            Viết chương trình giải quyết các bài toán trên theo các yêu cầu sau:

            Input cho trong tập tin CAU1.INP gồm 01 (một) dòng duy nhất ghi giá trị nk, mỗi giá trị cách nhau ít nhất một ký tự trắng.

            Output ghi vào tập tin CAU1.OUT là kết quả của bài toán, mỗi tổng ghi trên một dòng. Trong mỗi tổng, các số hạng cách nhau ít nhất một ký tự trắng..

            Chương trình ví dụ:

CAU1.INP

CAU1.OUT

8 3

1 2 5

1 3 4

   CODE THAM KHẢO:

Var mTest : Array[1..100] Of Integer;

N, K : Integer;


Procedure Print;

Var i : Integer;

Begin

For i := 1 To K Do Write(mTest[i], ' ');

WriteLn;

End;


Procedure Process;

Var i, j, T : Integer;

kt : Boolean;

Begin

T := 0;

For i := 1 To K Do T := T + mTest[i];


kt := True;

If T = N Then Begin

For i := 1 To K-1 Do

For j := i+1 To K Do

If mTest[i] >= mTest[j] Then kt := False

End Else kt := False;


If kt Then Print;

End;


Procedure Test(m : Integer);

Var i : Integer;

Begin

For i := 1 To N Do Begin

mTest[m] := i;

If m = K Then Process Else Test(m + 1);

End;

End;


Begin

        assign(input,'cau1.inp'); reset(input);

        assign(output,'cau1.out'); rewrite(output);

        ReadLn(N, K);

If Not ((3 <= N) And (N <= 1000) And (K > 0)) Then Begin

Write('Input khong hop le');

ReadLn;

Exit;

End;

Test(1);

        close(input); close(output);

End.



Nhãn:

Đăng nhận xét

[blogger]

Biểu mẫu liên hệ

Tên

Email *

Thông báo *

Được tạo bởi Blogger.
Javascript DisablePlease Enable Javascript To See All Widget