1. Trang chủ
  2. » Luận Văn - Báo Cáo

(Sáng kiến kinh nghiệm) một số kinh nghiệm nâng cao hiệu quả ôn thi học sinh giỏi thông qua các bài toán đệ quy, khử đệ quy và đệ quy

48 22 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Một Số Kinh Nghiệm Giải Toán Bằng Phương Pháp Đệ Quy Trong Ôn Thi HSG
Tác giả Trần Ngọc Dương
Trường học Trường THPT Nông Cống 4
Thể loại bài viết
Định dạng
Số trang 48
Dung lượng 412,39 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • A. PHẦN MỞ ĐẦU 2

  • A. PHẦN MỞ ĐẦU

  • a:array[0..50] of longint;

  • f:text;

  • Procedure Tach(n,k:longint);

  • var j,l:longint;

  • Begin

  • if (n>0) then

  • begin

  • if (k=0) then l:=1

  • else l:=a[k];

  • for j:=l to n do

  • begin

  • k:=k+1;

  • a[k]:=j;

  • tach(n-j,k);

  • k:=k-1;

  • end;

  • end

  • else

  • if k>1 then

  • begin

  • inc(socach);

  • write(f,a[1]);

  • for j:=2 to k do write(f,'+',a[j]:2);

  • writeln(f);

  • end;

  • End;

  • BEGIN

  • assign(f,fi); reset(f); readln(f,q); close(f);

  • socach:=0; r:=0;

  • assign(f,fo); rewrite(f);

  • tach(q,r); writeln(f,socach);

  • close(f);

  • END.

Nội dung

PHẦN MỞ ĐẦU

Lý do chọn đề tài

Việc đào tạo bồi dưỡng học sinh giỏi là công việc đầy thách thức, đòi hỏi sự nỗ lực lớn từ cả giáo viên và học sinh Trong những năm gần đây, đội tuyển học sinh giỏi trường THPT Nông Cống 4 đã đạt nhiều thành tích nổi bật trong các kỳ thi chọn học sinh giỏi cấp tỉnh, từ vị trí dưới thứ 40 trước năm 2015, đã vươn lên thứ 28 trong năm học 2016-2017 và giữ vững vị trí này trong năm học 2017-2018 Thành công này có được nhờ sự đóng góp to lớn của đội ngũ giáo viên trực tiếp giảng dạy và tinh thần vượt khó của các em học sinh, trong đó bộ môn Tin học cũng góp phần quan trọng Vì vậy, bản thân tôi luôn cố gắng phấn đấu để hòa nhịp cùng đội tuyển các môn trong nhà trường.

Sau nhiều năm đào tạo, tôi nhận thấy công tác ôn thi học sinh giỏi bộ môn Tin học gặp phải nhiều khó khăn nhưng cũng có những thuận lợi nhất định.

Nhờ sự quan tâm và động viên từ Ban giám hiệu nhà trường cùng sự đồng lòng của các bậc phụ huynh trong đội tuyển, các em học sinh đã được khích lệ và dành thời gian ôn luyện hiệu quả.

- Sự đúc kết kinh nghiệm giảng dạy, trau dồi kiến thức của bản thân trong quá trình giảng dạy.

Học sinh có ý thức học tập cao và say mê các môn học đòi hỏi tư duy sâu sắc Trong năm học 2017-2018, đội tuyển Tin học của trường đã có 2 em học sinh tham gia thi hai môn khác nhau, trong đó một em thi môn Hóa học và một em thi môn Toán.

Việc tìm kiếm và xây dựng nguồn nhân lực chất lượng gặp nhiều khó khăn, đặc biệt từ năm học 2017-2018 khi học sinh lớp 12 không còn tham gia dự thi, dẫn đến lực lượng học sinh lớp 11 có chất lượng khó có thể thi môn Tin học do các em đã tập trung vào các môn tự nhiên khác.

Học sinh thường phải lựa chọn giữa việc học chuyên sâu để thi học sinh giỏi và học để thi Đại học-Cao đẳng, vì vậy việc thi các môn không thuộc khối thi Đại học-Cao đẳng thường không được các em ưu tiên lựa chọn.

- Một số học sinh tham gia học bồi dưỡng nhưng chưa thật cố gắng nên kết quả thi học sinh giỏi chưa cao.

Do chưa đủ điều kiện và thời gian để tự bồi dưỡng, nghiên cứu nhằm nâng cao chất lượng dạy học, giáo viên đang phải đối mặt với áp lực công việc ôn luyện rất lớn.

- Cơ sở vật chất, trang thiết bị, tài liệu dạy học phục vụ cho công tác bồi dưỡng HSG còn nhiều thiếu thốn, hư hỏng nhiều.

Khối kiến thức thi học sinh giỏi rất rộng, trong khi thời gian ôn luyện của các em từ khi làm quen với ngôn ngữ lập trình đến khi thi chỉ khoảng 2-3 tháng.

Qua nhiều năm ôn luyện thi học sinh giỏi, tôi nhận thấy để giúp học sinh đạt kết quả cao nhất trong các bài thi khó, đặc biệt là các bài cuối cùng của đề thi, cần chú trọng vào việc áp dụng giải thuật đệ quy Đây là dạng bài thường gặp và đòi hỏi kỹ năng tư duy logic cũng như khả năng vận dụng kiến thức hiệu quả để giải quyết Việc nắm vững và luyện tập giải thuật đệ quy sẽ giúp học sinh vượt qua những thử thách trong các đề thi nâng cao.

Phép lặp là kỹ thuật thực hiện liên tiếp các câu lệnh cho đến khi điều kiện được thỏa mãn, trong khi đệ quy là phương pháp lập trình thay thế hiệu quả cho phép lặp Đệ quy giúp giải quyết các bài toán phức tạp một cách đơn giản và phù hợp với những bài toán có bản chất đệ quy Ngoài ra, nhiều bài toán hiện nay vẫn chưa có lời giải phi đệ quy, cho thấy tầm quan trọng và ứng dụng rộng rãi của kỹ thuật đệ quy trong lập trình.

Nhằm nâng cao hiệu quả ôn luyện thi học sinh giỏi và giải quyết những khó khăn trong quá trình ôn tập, tôi đã lựa chọn đề tài “Một số kinh nghiệm nâng cao hiệu quả ôn thi học sinh giỏi thông qua các bài toán đệ quy, khử đệ quy và đệ quy quay lui” làm sáng kiến kinh nghiệm của mình.

Mục đích nghiên cứu

- Nhằm nâng cao hiệu quả ôn luyện thi học sinh giỏi.

Tạo hứng thú cho học sinh tham gia kỳ thi học sinh giỏi môn tin học bằng cách sinh đề kiểm tra tự động cho mỗi bài tập, giúp chấm điểm chính xác và phân tích dữ liệu xử lý hiệu quả.

- Khắc phục các khó khăn khi giải các bài toán khó trong đề thi.

- Nâng cao năng lực của bản thân cũng như các đối tượng có sử dụng phương pháp đệ quy để giải bài tập.

Đối tượng và phạm vi nghiên cứu

1 Đối tượng: Đối tượng nghiên cứu của đề tài là tìm hiểu về lý thuyết đệ quy, xây dựng các phương pháp giải đệ quy thông qua các bài tập từ đơn giản đến phức tạp.

- Thực hiện các giải các bài toán bằng phương pháp đệ quy.

Nhiệm vụ nghiên cứu

- Nghiên cứu những cơ sở về lý luận về lý thuyết đệ quy, tìm hiểu các ứng dụng về đệ quy.

- Nghiên cứu và phân tích các đặc điểm, ưu - nhược điểm khi sử dụng giải toán bằng phương pháp đệ quy

- Nghiên cứu thực tiễn dạy học trong quá trình hướng dẫn học sinh giải toán bằng đệ quy.

Phương pháp nghiên cứu

- Tham khảo tài liệu sách, báo, mạng Internet có liên quan trực tiếp đến đề tài.

Trong quá trình dạy học ôn luyện thi học sinh giỏi lần lượt thực hiện các bước sau:

+ Tìm hiểu lý thuyết, các bài toán nào ứng dụng bằng phương pháp đệ quy.

+ Xây dựng các bài toán đơn giản giải bằng phương pháp đệ quy để học sinh tiếp cận từng bước các dạng toán được áp dụng.

+ Thực hiện giải các bài toán khó trong đề thi HSG tỉnh các năm và đề thi các tỉnh khác.

Tạo các bài TEST cho mỗi bài tập từ dễ đến khó giúp kích thích hứng thú học tập của học sinh, đồng thời đánh giá chính xác độ phức tạp của thuật toán và năng lực phân tích để viết chương trình tối ưu nhất.

PHẦN NỘI DUNG

Cơ sở lý luận của đề tài

1 Các khái niệm: a) Khái niệm Đệ quy:

Thuật toán đệ quy là phương pháp giải quyết bài toán A bằng cách sử dụng thuật toán của một bài toán A’ có dạng giống A nhưng nhỏ hơn Quá trình này bao gồm việc chia nhỏ bài toán ban đầu thành các bài toán con cùng loại, tiếp tục phân tách cho đến khi đạt đến bài toán cơ bản nhất có thể xử lý được (trường hợp suy biến), tại đó quá trình sẽ dừng lại.

Trong quá trình lập trình, việc xây dựng các chương trình con (thủ tục/hàm) sử dụng phương pháp đệ quy được hiểu là chương trình con có lời gọi chính nó, giúp giải quyết các bài toán phức tạp thông qua việc lặp lại các bước tương tự.

+ Các bài toán có thể dùng đệ quy:

Bài toán có thể được giải quyết dễ dàng trong một số trường hợp đặc biệt của tham số, gọi là trường hợp suy biến Trong trường hợp tổng quát, bài toán sẽ được quy về dạng tương tự nhưng với giá trị tham số thay đổi Qua một số bước biến đổi đệ quy hữu hạn, bài toán cuối cùng sẽ dẫn đến trường hợp suy biến, giúp việc giải quyết trở nên đơn giản hơn.

1 Định nghĩa về giai thừa n!:

+ Code mô tả như sau:

2 Định nghĩa về số tự nhiên:

0 là một số tự nhiên n là một số tự nhiên khi n-1 là 1 số tự nhiên

Từ các ví dụ trên, chúng ta thấy rằng hàm đệ quy là hàm gọi chính nó trực tiếp hoặc gián tiếp thông qua các hàm khác, tạo nên mô hình phân cấp trong lập trình Đệ quy là một khái niệm phức tạp và thường gây khó khăn cho người mới học, đặc biệt là những học sinh chưa có tư duy thuật toán sâu sắc Vì vậy, đề tài sẽ tập trung giới thiệu, phân tích và mô phỏng các bài toán đệ quy từ đơn giản đến phức tạp, giúp các em dễ dàng tiếp cận và hiểu rõ hơn về phương pháp này.

Trước tiên, ta cần hiểu rõ khái niệm đệ quy để áp dụng hiệu quả trong lập trình Tiếp theo, việc kiểm tra các chương trình chứa hàm đệ quy giúp nắm bắt cách hoạt động và ứng dụng thực tế Quá trình giải bài toán đệ quy thường tuân theo những bước chung, đảm bảo tính logic và hiệu quả trong giải thuật.

Hàm đệ quy giải bài toán bằng cách xử lý trường hợp cơ sở đơn giản nhất để trả lại kết quả, trong khi với các trường hợp phức tạp hơn, hàm sẽ chia bài toán thành phần đã biết cách giải và phần giống bài toán ban đầu nhưng đơn giản hơn, từ đó gọi lại chính nó để giải quyết Quá trình đệ quy đảm bảo kết thúc khi bài toán được đơn giản hóa dần và đạt đến trường hợp cơ sở, nhờ đó các kết quả từ các bước đệ quy nhỏ hơn sẽ được trả lại cho các bước phức tạp hơn cho đến khi hàm gọi ban đầu hoàn thành Đặc điểm nổi bật của chương trình con đệ quy là khả năng tự gọi lại chính nó để giải quyết các bài toán phức tạp thông qua việc lặp lại các bước đơn giản hóa và xử lý trường hợp cơ sở.

- Trong chương trình con đệ quy có lời gọi đến chính chương trình con đó.

- Mỗi lần gọi lại chương trình con đó thì kích thước bài toán đã thu nhỏ hơn trước.

Có một trường hợp đặc biệt trong lập trình đệ quy là trường hợp suy biến, giúp kết thúc việc chia nhỏ chương trình và truy hồi công thức để lấy kết quả Đệ quy được phân loại thành hai loại chính: đệ quy trực tiếp và đệ quy gián tiếp, mỗi loại có cách thức hoạt động riêng biệt trong việc giải quyết bài toán.

+ Đệ quy trực tiếp: Là loại đệ quy mà đối tượng được mô tả trực tiếp qua nó:

Ví dụ 1: A mô tả qua A, B, C… Trong đó B, C không chứa A

Gia phả của một người được mô tả đệ quy bao gồm chính người đó cùng với gia phả của cha và gia phả của mẹ, tạo nên một cấu trúc cây gia phả đầy đủ và chi tiết.

Ví dụ 3: Mô tả đệ quy về thi chọn hoa hậu:

- Chọn hoa hậu của từng khu vực.

- Chọn hoa hậu của các hoa hậu.

+ Đệ quy gián tiếp: Là loại đệ quy mà đối tượng được mô tả gián tiếp qua nó:

Ví dụ: A mô tả qua B, C, D Trong đó: B được mô tả qua A và E, còn C và D không chứa A

2 Nguyên tắc hoạt động của giải thuật đệ quy:

Trong quá trình thực hiện lời gọi đệ quy, các tham số, biến cục bộ và địa chỉ được lưu tạm thời trong bộ nhớ theo mô hình stack, giúp xử lý dữ liệu theo nguyên tắc giá trị vào sau cùng sẽ được lấy ra đầu tiên Điều này đảm bảo việc giải quyết các trường hợp suy biến diễn ra chính xác và hiệu quả Stack là cấu trúc dữ liệu quan trọng trong việc quản lý quá trình lưu và xử lý thông tin trong đệ quy.

Stack (ngăn xếp) là một cấu trúc dữ liệu cho phép thêm và xóa phần tử chỉ tại một đầu, tuân theo nguyên lý Last-In-First-Out (LIFO) Điều này có nghĩa là phần tử được thêm vào sau cùng sẽ là phần tử được lấy ra đầu tiên, giúp quản lý dữ liệu hiệu quả trong nhiều ứng dụng lập trình.

Ví dụ: - Xếp đĩa CD chồng lên nhau, đĩa CD cuối cùng đưa vào sẽ là đĩa CD đầu tiên lấy ra

Mọi phần tử trong Stack phải cùng kiểu dữ liệu và có thể là bất kỳ kiểu dữ liệu nào, bao gồm cả struct hoặc object Một Stack bao gồm phần đáy (bottom) và phần đỉnh (top), trong đó phần tử nằm trên cùng là phần tử được truy xuất đầu tiên theo nguyên tắc LIFO (Last In, First Out) Stack được sử dụng phổ biến trong lập trình để quản lý dữ liệu tạm thời và thực hiện các thao tác như đẩy (push) và lấy ra (pop) phần tử một cách hiệu quả.

Hình ảnh minh họa hoạt động của stack cho thấy phần tử ở đỉnh stack được gọi là Top Item, nơi mọi thao tác thêm và xóa phần tử đều diễn ra Nguyên tắc hoạt động của giải thuật đệ quy ứng dụng stack dựa trên việc xử lý các phần tử tại đỉnh stack, giúp quản lý và thực hiện các bước đệ quy một cách hiệu quả.

- Khi thực hiện một giải thuật đệ quy thì các bước của giải thuật đệ quy sẽ lần lượt được thực hiện tuần tự

Khi gặp lời gọi đệ quy, trước khi thực hiện, đoạn mã lệnh hiện tại cùng các đối tượng dữ liệu liên quan sẽ được lưu vào stack để đảm bảo quá trình thực thi diễn ra chính xác và hiệu quả.

Khi không thể thực hiện lời gọi đệ quy nữa do trường hợp suy biến, các đối tượng được lưu trong stack sẽ được lần lượt lấy ra để xử lý, đảm bảo quá trình thực thi diễn ra chính xác và hiệu quả.

Ví dụ: Giải thuật đệ quy cho bài toán tính N!

Giả sử N = 3, quy trình thực hiện như sau:

- Thực hiện lời gọi hàm: giaithua := gt(3); máy tính sẽ ghi nhớ là: gt(3) := 3 * gt(2); và đi tính gt(2).

- Tiếp tục máy lại ghi nhớ: gt(2):= 2*gt(1); và đi tính gt(1).

- Theo định nghĩa của hàm thì khi gt(1):= 1; máy sẽ quay ngược lại: gt(2):= 2 * 1; và cho kết quả là 2.

- Tiếp tục: gt(3) := 3 * 2; cho kết quả là 6.

Như vậy kết quả cuối cùng trả về là 6 Ta có: 3! = 6

Ứng dụng giải toán bằng phương pháp đệ quy trong toán học và thực tiễn có cả ưu điểm và nhược điểm Ưu điểm của giải thuật đệ quy là giúp giải quyết các bài toán phức tạp một cách rõ ràng, logic và dễ hiểu thông qua việc chia nhỏ vấn đề thành các bài toán con đơn giản hơn Tuy nhiên, nhược điểm của phương pháp này là có thể gây tốn kém bộ nhớ và thời gian xử lý do việc gọi hàm lặp lại nhiều lần, đồng thời dễ dẫn đến lỗi tràn ngăn xếp nếu không được kiểm soát tốt Do đó, khi áp dụng giải thuật đệ quy cần cân nhắc kỹ lưỡng để tận dụng hiệu quả và hạn chế các vấn đề phát sinh.

- Công cụ ứng dụng rất tốt với các bài toán có bản chất đệ quy, thể hiện tư duy rõ ràng và chặt chẽ.

- Ngắn gọn và có khả năng định nghĩa một tập hợp lớn các đối tượng bằng một số các câu lệnh hữu hạn.

- Giải thuật đệ quy thực hiện được nhiều bài toán mà giải thuật không đệ quy không thể thực hiện được.

- Chương trình có chứa giải thuật đệ quy trở nên ngắn gọn, dễ hiểu, nêu bật bản chất vấn đề trong bài toán.

GIẢI PHÁP NÂNG CAO HIỆU QUẢ ÔN LUYỆN THI HSG THÔNG QUA CÁC BÀI TẬP VÍ DỤ ĐỆ QUY, ĐỆ QUY QUAY LUI VÀ KHỬ ĐỆ QUY

Như đã đề cập ở phần đầu của SKKN, sau khi phân tích các khái niệm cùng ưu nhược điểm của đệ quy, đệ quy quay lui và khử đệ quy, tôi sẽ xây dựng các bài toán từ đơn giản đến phức tạp Mỗi bài toán có thể áp dụng một hoặc cả ba phương pháp trên nhằm giúp học sinh linh hoạt trong việc xây dựng thuật toán, với mã nguồn cụ thể được trình bày trong phần phụ lục Đặc biệt, mỗi bài toán đều kèm theo bộ test trên đĩa CD, giúp học sinh tối ưu thuật toán và tăng hứng thú trong học tập.

1 Các bài tập cơ bản về đệ quy và không đệ quy:

BÀI 1: Cho n là một số nguyên dương, hãy tính lũy thừa an Đệ quy Lặp (không đệ quy)

If n = 0 then LT := 1 else LT := a * LT(a,n - 1);

Function LT (a: Longint;n: Word): Longint; Var i: Word; S: Longint;

BÀI 2: Cho n là một số nguyên dương, tính tổng S=1+2+3+ +n Đệ quy Lặp (không đệ quy)

If k=1 then S:=1 else If k>1 then S:=S(k-1) + k;

BÀI 3: Cho n là một số nguyên dương, Tìm số fibonaxi thứ n Đệ quy Lặp (không đệ quy)

If ((n=0)or(n=1)) then Fibo:=1 function Fibo(n : int64):int64; var f0, f1, fi:int64; i :integer; begin

End; // CHẠY CHẬM KHI NE if nn) then UCLN:=UCLN(m-n,n) else UCLN:=UCLN(m,n-m);

2 Các bài tập đệ quy và đệ quy quay lui:

BÀI 1: Liệt kê tất cả các hoán vị n số tự nhiên nguyên dương đầu tiên theo thứ tự tăng dần của từ điển:

Ví dụ: N = 3 gồm các hoán vị: 123, 132, 213, 231, 312, 321

- Với N=1 thì chỉ có 1 hoán vị duy nhất là: 1.

- Với N= 2 thì có 2 hoán vị là:

+ Khi chọn 1 là số đứng đầu, ta có hoán vị: 1 2

+ Khi chọn 2 là số đứng đầu, ta có hoán vị: 2 1

+ Khi chọn 1 là số đứng đầu, ta có 2 hoán vị: 1 2 3; 1 3 2

+ Khi chọn 2 là số đứng đầu, ta có 2 hoán vị: 2 1 3; 2 3 1

+ Khi chọn 3 là số đứng đầu, ta có 2 hoán vị: 3 2 1; 3 1 2

Với tập hợp gồm N số, khi chọn một số bất kỳ từ 1 đến N làm phần tử đầu tiên, ta sẽ tạo ra các hoán vị bằng cách kết hợp số đã chọn này với các hoán vị của tập con còn lại {1 N} không bao gồm số đã chọn Phương pháp này giúp xây dựng tất cả các hoán vị của tập số {1 N} một cách hệ thống và đầy đủ.

Như vậy, ta nhận thấy có thể giải bài toán này bằng cách dùng thuật toán đệ quy quay lui.

- Try(j): thực hiện chọn số thứ j cho hoán vị.

- Các phương án chọn: Có N phương án chọn, i = 1, 2, 3 , N.

- Chọn được: khi giá trị i chưa được chọn.

Phương pháp tổ chức lưu trữ sử dụng một mảng một chiều KTra1 gồm N phần tử với kiểu dữ liệu Boolean, trong đó tất cả các phần tử được khởi tạo ban đầu có giá trị True.

KTra1 True True True … True i 1 2 3 … n

Giá trị i chưa được chọn khi KTra1[i]= True

- Thực hiện bước đi thứ j:

+ Đánh dấu giá trị được chọn: KTra1[i]:= False.

+ Gán giá trị của i cho số thứ j:

- Cách tổ chức lưu trữ: Dùng một mảng một chiều KTra2 có N phần tử để lưu các giá trị đã được chọn:

KTra2 True True True … True j 1 2 3 … n

- Thành công: Khi đã chọn đủ N số ( j=N).

- Hủy bước đi thứ j: gán giá trị True cho KTra1[i]: KTra1[i]: =True;

The algorithm uses a recursive procedure to generate permutations by iterating through elements and marking them as used with boolean arrays For each position, it selects an unused element, assigns it, and proceeds to the next position until all positions are filled Once a complete permutation is formed, it outputs the sequence The process then backtracks to explore other possibilities, ensuring all permutations are generated efficiently This method is implemented with byte variables and boolean checks to maintain state during recursion.

Chương trình chính: thực hiện gọi try(1);

BÀI 2: Liệt kê dãy nhị phân có độ dài n

Biểu diễn dãy nhị phân có độ dài n dưới dạng a[1 n], ta sẽ liệt kê tất cả các dãy nhị phân bằng cách thử gán các giá trị {0,1} cho từng phần tử a[i] Với mỗi giá trị được gán cho a[i], ta tiếp tục thử các giá trị có thể gán cho a[i+1], tạo thành quá trình tìm kiếm quay lui Ví dụ, với n=3, cây tìm kiếm quay lui sẽ thử lần lượt các giá trị 0 và 1 cho từng vị trí trong dãy để liệt kê toàn bộ các dãy nhị phân có thể có.

Thuật toán: (Code tham khảo trong phần phụ lục) procedure try(i:integer); var j: integer;

Đoạn mã sử dụng vòng lặp từ 0 đến 1 để gán các giá trị có thể cho phần tử a[i], sau đó kiểm tra từng giá trị này Nếu i đạt đến n, chương trình sẽ xuất kết quả hiện tại, ngược lại sẽ gọi đệ quy để thử giá trị tiếp theo cho a[i+1] Phương pháp này giúp duyệt qua tất cả các cấu hình có thể của mảng a, đảm bảo tìm kiếm và in ra mọi trường hợp phù hợp.

Chương trình chính: thực hiện gọi try(1);

BÀI 3: Bài toán rút tiền tự động ATM

Một máy rút tiền tự động ATM có n (n< ) tờ tiền có giá trị t1,t2,…,tn Hãy đưa ra một cách trả với số tiền đúng bằng S.

Dữ liệu vào từ file “ATM.INP” có dạng:

- Dòng đầu là 2 số n và s

Kết quả ra file “ATM.OUT” có dạng: Nếu có thể trả đúng S thì đưa ra cách trả, nếu không thì ghi -1 Ví dụ:

Thuật toán: (Code tham khảo trong phần phụ lục) procedure xuat; {tính cách trả}

16 procedure try(i:integer); var j:integer; begin for j:=0 to 1 do if ktse then begin a[i]:=j; if i=n then xuat else try(i+1); end; end;

BEGIN {Đọc và ghi kết quả} END.

Cho dãy số nguyên a1, a2, , an, một số ap (với 1 < p < n) được gọi là số trung bình cộng nếu tồn tại ba chỉ số i, j, k (đều khác nhau và thuộc khoảng 1 < i, j, k < n) sao cho ap bằng trung bình cộng của ai, aj và ak, tức ap = (ai + aj + ak)/3 Đây là một điều kiện quan trọng trong việc xác định các số trung bình cộng trong dãy số nguyên cho trước.

Yêu cầu: Cho n và dãy số a1 a2, an Hãy tìm số lượng các số trung bình cộng trong dãy.

Dữ liệu vào: Từ tệp TBC.INP

- Dòng đầu ghi số nguyên dương n (3 < n < 1000)

- Dòng thứ hai chứa n số nguyên ai (|ai|< 10 8 ) mỗi số cách nhau bởi dấu cách.

Kết quả ra : Ghi vào tệp TBC.OUT số lượng các số trung Bình cộng trong dãy.

Thuật toán: (Code tham khảo trong phần phụ lục)

Procedure try(i:integer); var j:integer; begin for j:=1 to n do if b[j]=0 then begin a[i]:=j; if a[i]>a[i-1] then if i=3 then xuat else begin b[j]:=1; try(i+1);

Trong dịp lễ 30 tháng 4 và 1 tháng 5 năm nay, do trùng với ngày giỗ tổ Hùng Vương 10 tháng 3 âm lịch, số ngày nghỉ lễ tăng lên, kéo theo lượng khách du lịch đổ về Nha Trang tăng kỷ lục, khiến các khách sạn tại đây "cháy phòng" Khách sạn Quang Huy chỉ còn một phòng duy nhất và quyết định cho thuê theo hình thức thỏa thuận giá cả Sau khi tổng hợp n đơn đặt hàng với ngày bắt đầu ai, ngày trả phòng bi và mức giá ci khách hàng chấp nhận, ban quản lý gặp khó khăn trong việc lựa chọn đơn đặt hàng phù hợp do thời gian thuê chồng chéo và mức giá khác nhau.

Yêu cầu: Viết chương trình giúp khách sạn nhận đơn đặt phòng sao cho lợi nhuận thu được là lớn nhất.

Lưu ý: Theo điều lệ của khách sạn, khách hàng phải trả phòng trước 12 giờ trưa, khách hàng khác có thể nhận phòng từ 12 giờ trong một ngày.

Dữ liệu vào: được ghi trên tệp khachsan.inp bao gồm:

- Dòng thứ nhất là số nguyên n (1 ≤ n ≤ 12000) thể hiện số đơn đặt hàng.

- n dòng tiếp theo gồm 3 số nguyên ai, bi và ci Mỗi số cách nhau một khoảng trắng với ràng buộc(l ≤ai ≤ bi ≤ 100, 0 ≤ ci ≤1000).

Dữ liệu ra: lưu trong tệp khachsan.out với một số nguyên thể hiện số tiền lớn nhất.

Ví dụ: khachsan.inp khachsan.out khachsan.inp khachsan.out

Thuật toán: (Code tham khảo trong phần phụ lục) procedure try(i:byte); var j:byte; begin for j:=1 to n do if b[j]=0 then begin a[i]:=j; if a[i]>a[i-1] then if vao[a[i]]>=ra[a[i-1]] then

18 if i=k then xuat {kiem tra tuan tu cac hoan vi} else begin b[j]:=1; try(i+1); b[j]:=0; end; end; end;

* Ghi chú: Các bài toán kèm theo giải thuật, test được bổ sung thêm trong phần phụ lục và đĩa CD.

Để nâng cao hiệu quả ôn thi học sinh giỏi, tôi luôn tìm tòi và áp dụng nhiều phương pháp giải quyết vấn đề, đặc biệt là các bài toán khó Phương pháp đệ quy được sử dụng trong một số bài toán nhằm trang bị cho học sinh kiến thức về cách giải đa dạng, bao gồm phân tích thuật toán, quản lý bộ nhớ lưu trữ và tối ưu tốc độ xử lý chương trình.

Việc phân tích và áp dụng các phương pháp đệ quy, khử đệ quy và đệ quy quay lui trong giải quyết bài toán giúp giáo viên nâng cao hiệu quả giảng dạy, cải thiện khả năng truyền đạt kiến thức và phát triển tư duy logic cho học sinh Đây là những kỹ thuật quan trọng hỗ trợ giáo viên trong việc xây dựng bài giảng sinh động, dễ hiểu, đồng thời giúp học sinh tiếp cận và vận dụng kiến thức một cách linh hoạt và sáng tạo.

- Tăng cường tiếp thu các kiến thức tư duy giải thuật, bồi dưỡng và trau dồi kiến thức.

Quá trình ôn thi học sinh giỏi không chỉ là việc truyền đạt kiến thức một chiều mà còn là cơ hội để giáo viên học hỏi và tiếp thu từ các em học sinh, tạo nên sự tương tác hai chiều hiệu quả trong giảng dạy.

Thông qua việc áp dụng các bài toán giải bằng phương pháp đệ quy, khử đệ quy và đệ quy quay lui, giáo viên có thể nâng cao kiến thức phân tích thuật toán một cách rõ nét hơn Đồng thời, các phương pháp này giúp tối ưu hóa chương trình, cải thiện tốc độ xử lý và tiết kiệm không gian lưu trữ hiệu quả.

Xây dựng các bài kiểm tra cho chương trình nhằm tạo hứng thú học tập đồng thời giúp thử nghiệm các đặc trưng và nhược điểm của phương pháp đệ quy Việc này đặc biệt hữu ích đối với học sinh trực tiếp tham gia ôn luyện, giúp nâng cao hiệu quả tiếp thu kiến thức và phát triển kỹ năng giải quyết vấn đề.

- Biết phân tích, đánh giá giải thuật từ đó xây dựng chương trình hoàn thiện hơn, nhằm vét tất cả các test trong đề thi.

- Hứng thú học tập thông qua cách chấm điểm từ các test được giáo viên xây dựng.

- Kết quả các năm ôn thi của học sinh:

TT Họ và tên Giải Năm học

1 Nguyễn Thị Thu Trang KK 2015

Ngày đăng: 21/06/2021, 09:06

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w