[Tin]Bài tập đệ quy quay lui

O

o0_zz_0o

[TẶNG BẠN] TRỌN BỘ Bí kíp học tốt 08 môn
Chắc suất Đại học top - Giữ chỗ ngay!!

ĐĂNG BÀI NGAY để cùng trao đổi với các thành viên siêu nhiệt tình & dễ thương trên diễn đàn.

[FONT=&quot]CDROM.INP[/FONT]
[FONT=&quot]40 10[/FONT]
[FONT=&quot]10 8 5 9 7 4 5 11 20 6[/FONT]
[FONT=&quot]CDROM. OUT[/FONT]
[FONT=&quot]6 35[/FONT]
[FONT=&quot]8 5 7 4 5 6[/FONT]











[FONT=&quot]Mỗi đĩa CD ROM đều có dung lượng ghi tối đa. Người ta muốn chép các bài hát lên đĩa sao cho số bài hát là nhiều nhất. Em hãy xây dựng thuật toán và viết chương trình nhập vào dung lượng tối đa của đĩa, nhập vào số bài hát, kích thước các bài hát. Tính [/FONT][FONT=&quot]số bài hát có thể ghi? tổng kích thước là bao nhiêu?[/FONT]


Bài tập này nếu bình thường làm khá đơn giản nhưng thầy yêu cầu giải đệ quy quay lui ( mặc dù làm khó và phức tạp hơn) mọi người gíp em với ( sử dụng file và chương trình con luôn nhé )

 
Last edited by a moderator:
O

o0_zz_0o

Em làm được không post lên đây anh sửa cho. Anh muốn em tự làm được bài theo ý tưởng của em. Vì anh biết em có thể làm được

Em làm được cách giải bình thương thôi ( Sắp xếp từ bé đến lớn rồi đếm và tính tổng rồi xử lí để in ra kích thước bài hát đúng theo thứ tự cuả dãy ban đầu )
Còn quay lui thì em chịu
Em chỉ mới đọc lý thuyết đệ quy quay lui chứ chưa hề làm 1 bài tập nên cần anh giúp em giải và hướng dẫn 1 cách chi tiết thì càng tốt
 
O

o0_zz_0o

Anh ơi
Có lỗi '' exited with exitcode 201'' ở Free Pascal và thoát ra ra hoàn toàn ở Turbo Psacal
 
C

concanhcam

Mã:
const inp='cdrom.inp'; out='cdrom.out';
var fi,fo:text;
n,m,i,j,tong,dem:integer;
  a,b:array [1..1000] of integer;

procedure nhap  ;
begin
assign(fi,inp);
  reset(fi);
      read(fi,m,n);
      for i:=1 to n do
      read(fi,a[i]);
  close(fi);
end;



procedure xuat  ;
  begin
    assign(fo,out);
      rewrite(fo);
      WRITE(FO,TONG,'  ',J)
      WRITELN;(FO)
         for i :=1 to j dO
            write(fo,b[i],'  ');
    close(fo);
  end;
procedure try(k:integer);
   begin
     if dem=1 then xuat else
        if tong=k then dem:=dem+1 else
            if tong<k then
                begin
                   tong:=tong+a[i];
                   i:=i+1;
                   b[j]:=a[i];
                   j:=j+1;
                   try(k);
                   j:=j-1;
                   b[j]:=0;
                   i:=i-1;
                   tong:=tong-a[i];
                End;

  end;

  {********************************}

BEGIN
NHAP;
I:=1;
TRY(M);
END.

Em thử cái này xem
 
Top Bottom