Câu 1: 8 điểm A học ngành Chăn nuôi Trồng trọt trồng được một vườn táo gồm N hàng, mỗi hàng có N cây táo.. A bèn dẫn B đi thăm vườn táo và đặt ra một bài toán như sau: - B được quyền chọ
Trang 1ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM
KHOA: CÔNG NGHỆ THÔNG TIN
BỘ MÔN: TIN HỌC CƠ SỞ
Đề thi môn: Kỹ thuật lập trình
Mã môn học: PRTE240385
Học kỳ 1 năm học 2014-2015
Đề số 01 Đề thi có 2 trang.
Thời lượng: 80 phút
Được phép sử dụng tài liệu giấy.
Câu 1: (8 điểm)
A (học ngành Chăn nuôi Trồng trọt) trồng được một vườn táo gồm N hàng, mỗi hàng có N cây táo Mỗi cây có một số lượng quả khác nhau được minh họa như hình bên dưới (N=5) Một hôm có cậu bạn thân B (vốn đang theo học ngành Công nghệ Thông tin) về chơi A bèn dẫn B đi thăm vườn táo và đặt ra một bài toán như sau:
- B được quyền chọn một cây táo bất kỳ ở hàng đầu tiên cạnh lối vào làm điểm xuất phát Khi đến cây táo nào thì được quyền hái toàn bộ số táo có trên cây đó
- Mỗi hàng táo chỉ được phép chọn 1 cây Khi sang hàng tiếp theo thì chỉ được chọn 1 trong 3 cây gần với cây đang đứng nhất Trường hợp đã ra đến bìa vườn (bìa trên hoặc bìa dưới) thì chỉ còn lại 2 khả năng để đi tiếp
- B phải đi hái làm sao để khi ra khỏi vườn, tổng số táo thu được là NHIỀU NHẤT.
Yêu cầu:
Sử dụng ngôn ngữ lập trình C/C++ để viết chương trình thực hiện các công việc sau:
a) (2đ) Cho tập tin văn bản đầu vào có tên là INPUT.TXT lưu nội dung của một
ma trận vuông cấp N với cấu trúc như sau:
- Dòng đầu của tập tin lưu trữ 1 số nguyên dương N (0<N20), quy định cấp của ma trận
- Từ dòng thứ 2 trở đi mỗi dòng lưu N số nguyên không âm, là giá trị từng dòng của ma trận
Trang 2Viết hàm mở và đọc dữ liệu từ tập tin INPUT.TXT trên, lưu vào biến N và ma trận vuông A cấp N
b) (3đ) Đề xuất và cài đặt một giải thuật theo phương pháp tham lam (Greedy)
để giúp B giải nhanh bài toán trên với kết quả tương đối tốt (có thể chưa phải
là tốt nhất) Ví dụ như hình dưới, các ô in đậm là đường đi, tổng số táo thu được là 8+4+4+2+6 = 24 quả
8 4 3 2 5
Khai báo hàm gợi ý như sau:
int thamlam(int A[][20], int N, int path[]);
Hàm trả về tổng số táo hái được; mảng path[] lưu các vị trí đi qua
c) (3đ) Cài đặt (các) hàm sử dụng phương pháp quay lui và vét cạn để xét tất cả
các đường đi có thể có nhằm giúp A tìm ra lời giải tối ưu cho bài toán (số táo thu được là nhiều nhất) VD như hình dưới, tổng số táo thu được là 31 quả
4 6 7 8 2
Khai báo hàm gợi ý như sau:
int vetcan(int A[][20], int N, int path[]);
Hàm trả về tổng số táo hái được nhiều nhất; mảng path[] lưu các vị trí đi qua
Câu 2: (2 điểm)
Hãy áp dụng phương pháp quy hoạch động để viết hàm tìm giá trị phần tử thứ n
trong dãy số Fibonacci sao cho hàm có độ phức tạp tính toán là O(n) Dãy số được
xây dựng theo quy tắc như sau:
- 2 phần tử đầu tiên của dãy có giá trị bằng 1;
- Từ phần tử thứ 3 trở đi, giá trị của nó bằng tổng giá trị của 2 phần tử liền
kề trước nó
VD: 10 phần tử đầu của dãy là 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,…
Ghi chú: CBCT không giải thích đề thi
Trang 3TP HCM, ngày…… tháng …… năm 2015
Trưởng bộ môn