Page 121 - C:\Users\Admin\Desktop\Sach mem upweb\
P. 121

100 Problems & Solutions                                               Trang 121


                       Var i,j : integer ;
                        Begin
                          Clsscr;
                          for i:= 1 to do
                           begin
                              for j:= 1to 4 do write (4*(i-1) + j :3);
                              for j:= 0 to 4 do write (81-4*i-(i-1)+j :3) ;
                              Writeln;
                           end ;
                          Write (‘tong cac so o cot 5: ‘,(37+77)*9div2);
                          Readln
                       End.
                      (Lời giải của bạn  Nguyễn Chí Thức -  Lớp 11A1 - Khối PTCTT - ĐHSPHN - Thôn Đại
                      Đồng - xã Thuỵ Phương - Từ Liêm - Hà Nội)

                      Bài 67/2001 - Về các phép biến đổi "Nhân 2 trừ 1"
                      (Dành cho học sinh THCS và PTTH)
                      Để biến đổi ma trận A thành 0, ta biến đổi từng cột thành 0
                      Xét một cột bất kì có n số a1, ..., an (ai >= 0)
                      Đặt X = max(a1, ..., an).
                       - Bước 1:
                         + Nếu dãy a1, ..., an có một số 0 và một số khác 0, dừng ở đây vì không thể đưa A về
                      0;
                      - Bước 2:
                         + Nếu dãy a1, ..., an có ai = 0 (i = 1..n) thì cột này đã được biến đổi xong, qua cột tiếp
                      theo,
                         + Nếu không thì ai = 2ai nếu 2ai <= X (nhân hàng có chứa số ai lên 2), tiếp tục thực
                      hiện đến khi không nhân được nữa, qua  bước 3;
                        - Bước 3:
                             X:= X-1;
                             ai:= ai-1;
                      Quay lại bước 2.
                      Đây không phải là lời giải tốt ưu nhưng rất đơn giản, dễ dàng cài đặt (việc viết chương
                      trình tương đối đơn giản)
                      Nhận xét: Bài này thực sự dễ nếu chỉ dừng lại ở mức tìm thuật toán? Nếu đặt lại điều
                      kiện là có thể nhân hàng, cột cho 2, trừ hàng, cột cho 1, tìm lời giải tối ưu với giới hạn
                      của M, N thì hay hơn nhiều.
                      (Lời giải của bạn Vũ Lê An - Lớp 11T2 - Lê Khiết - Quảng Ngãi)
                      Thuật toán của bạn Vũ Lê An rất đúng. Song trên thực tế thuật toán này còn một điểm
                      chưa chuẩn vì nếu các số của mảng số thì nhỏ, số thì lớn thì thuật toán này mất rất nhiều
                      bước. Việc nhân có thể gây ra tràn số.
                      Ví dụ:
                      2 3
                      1      100     1
                      100   1        100
                      số bước sẽ rất lớn.
                      Nhưng thuật toán này trên lý thuyết là giải được. Chương trình theo thuật toán trên.
                      {$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q+,R+,S+,T-,V+,X+,Y+}
                      {$M 16384,0,655360}
                      program bai67_bien_doi_mang; {Author : Nguyen Van Chung}



                      Tin học & Nhà trường                                       100 Đề Toán - Tin học
   116   117   118   119   120   121   122   123   124   125   126