Mọi người cho em hỏi là trong pascal, làm sao để thoát hoàn toàn khỏi đệ quy và quay lại chương trình chính
Hỏi về thoát khỏi đệ quy trong pascal
Cho đệ quy một điểm dừng, còn ko thì thoát cả chương trình bằng halt()
----------
PROCEDURE chiaqua(dem:INTEGER);
VAR j:INTEGER;
BEGIN
FOR j:=n DOWNTO 1 DO
IF (dem=n DIV k) AND (t+j=s) AND (b[j]=true) THEN
BEGIN
a[1][dem]:=j;
exit;
END
ELSE
IF (dem<n DIV k) AND (t+j<s) AND (b[j]=true) THEN
BEGIN
a[1][dem]:=j;
t:=t+j;
b[j]:=false;
chiaqua(dem+1);
b[j]:=true;
t:=t-j;
END;
END;
Bạn giúp mình sửa điểm dừng được không?
Bạn có thể up cả bài và đề lên ko
Đề:
Chia quà
Ban tổ chức kỳ thi Olympic tin hoc 2007 nhận được từ các nhà tài trợ N gói quà đánh số từ 1 đến N và có giá trị khác nhau tương ứng từ 1 đến N. Ban tổ chức muố chí tất cả N gói quà cho K học sinh tham gia Olimpic saôch mỗi học sinh nhận được số lượng gói quà như nhau và có tổng giá trị như nhau.
Nhập vào từ bàn phím N: hai số nguyên dương N và K (1=N, K=200).
Xuất ra màn hình: K dòng, mỗi dòng gồm N /k số là giá trị các gói quà của mỗi học sinh nhận được. Nếu có nhiều cách chia quà thoả mãn yêu cầu thì chỉ cần đưa ra một phương án.
Trong trường hợp không có cách chia quà thoả mãn yêu cầu thì ghi số 0.
Ví dụ N = 8 và K =2 thì học sinh thứ nhất sẽ nhận các gói quà 1, 4, 6, 7 và học sinh thứ hai sẽ nhận các gói quµ 2,3,5,8.
Mình đang mắc ở trường hợp N là số lẻ
Cảm ơn bạn giúp đỡ!
Nếu N % k != 0 (Không có cách chia để mỗi học sinh nhận được số gói quà = nhau) hoặc (N*(N+1)/2) % K != 0 (Không có cách chia để mỗi học sinh nhận được phần quà có giá trị như nhau) thì không có cách chia và bài này nếu xài đệ quy thì độ phức tạp cực lớn (200!) nên khi bạn chạy với N và K lớn thì phải đợi rất lâu
Mình muốn hỏi là nếu N là số lẻ và có cách chia thì tư tưởng là gì?
Thì ta có mỗi học sinh sẽ nhận đc (N/k) gói quà và tổng giá trị mỗi phần quà là ( (N*(N+1)/2) / K).