1. Trang chủ
  2. » Tất cả

Báo cáo kỹ thuật lập trình đệ quy và khử đệ quy

29 1 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Định dạng
Số trang 29
Dung lượng 248,19 KB

Nội dung

Nguyễn Duy Khánh Linh – 20204839 TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI BÁO CÁO KỸ THUẬT LẬP TRÌNH Đệ quy và khử đệ quy BUỔI 3 – TUẦN 39 NGUYỄN DUY KHÁNH LINH Linh ndk204839@sis hust edu vn Ngành Kỹ Thuật Lậ[.]

Nguyễn Duy Khánh Linh – 20204839 TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI BÁO CÁO KỸ THUẬT LẬP TRÌNH Đệ quy khử đệ quy BUỔI – TUẦN 39 NGUYỄN DUY KHÁNH LINH Linh.ndk204839@sis.hust.edu.vn Ngành Kỹ Thuật Lập Trình – IT2 Giảng viên hướng dẫn: Lê Thị Hoa Bộ mơn: Kỹ thuật lập trình Viện: Cơng nghệ Thơng tin Truyền thông MỤC LỤC IT3040 – 20212 – 715027 HÀ NỘI, 23/5/2022 Chữ ký GVHD Nguyễn Duy Khánh Linh – 20204839 Bài thực hành – tuần 39: Đệ quy khử đệ quy Phần Thực hành đệ quy I Đệ quy – quay lui Bài tập 1: Tính dãy Lucas Dãy Lucas định nghĩa Ln=Ln−1+Ln−2 bắt đầu L0=2, L1=1 Viết hàm tính số Lucas thứ n Bài tập 2: Quân mã tuần Trên bàn cờ vua kích thước nxn quân mã ô (1, 1) Hãy đưa dãy di chuyển mã cho ô bàn cờ qua lần (ô (1, 1) xem qua) II Kỹ thuật nhánh cận Bài tập 3: Bài toán người du lịch .7 Một người xuất phát thành phố 1, muốn thăm tất thành phố khác, thành phố lần quay Chi phí để từ thành phố i sang thành phố j c[i][j] Hãy tìm tổng chi phí nhỏ III Đệ quy có nhớ Bài tập 4: LIS Cho dãy a có n phần tử Một dãy a dãy thu cách xóa số phần tử a giữ nguyên thứ tự phần tử lại (có thể khơng xóa phần tử nào) Hãy tìm dãy tăng dài a Phần Khử đệ quy .11 Bài tập 5: Tính tổ hợp 11 Tính nCk 11 Bài tập 6: Tìm ước chung lớn 13 Tính ước chung lớn hai số cho trước 13 Bài tập 7: Liệt kê xâu nhị phân 14 Sử dụng phương pháp khử đệ quy stack, liệt kê xâu nhị phân độ dài n k bit liên tiếp .14 Bài tập 8: Cân đĩa 16 Bạn muốn kiểm tra xem vật cho trước có nặng M người ta nói hay khơng Có cân thăng n cân Quả thứ i nặng mi Hãy cách cân thỏa mãn Quy cách in tích hợp mã nguồn 16 Phần Bài tập nhà 18 Bài tập 9: Lập lịch cho y tá .18 Một y tá cần lập lịch làm việc NN ngày, ngày làm việc hay nghỉ ngơi Một lịch làm việc tốt khơng có hai ngày nghỉ liên tiếp chuỗi ngày tối đại làm việc liên tiếp có số ngày thuộc đoạn [K1,K2][K1,K2] Hãy liệt kê tất cách lập lịch tốt, với lịch in IT3040 – 20212 – 715027 Nguyễn Duy Khánh Linh – 20204839 dòng xâu nhị phân độ dài nn với bit 0/1 tương ứng nghỉ/làm việc Các xâu phải in theo thứ tự từ điển 18 Bài tập 11: Lịch trình chụp ảnh 22 Superior đảo tuyệt đẹp với nn địa điểm chụp ảnh đường chiều nối điểm chụp ảnh với Đồn khách tham quan có rr người với sở thích chụp ảnh khác Theo đó, người đưa danh sách địa điểm mà họ muốn chụp Bạn cần giúp người đoàn lập lịch di chuyển cho qua điểm họ yêu cầu lần, không qua điểm khác, bắt đầu điểm kết thúc điểm cuối danh sách mà họ đưa ra, có tổng khoảng cách lại nhỏ 22 Bài tập 12: Đếm đường 27 Cho đồ thị vô hướng G, đếm số đường đi qua k cạnh không qua đỉnh lần 27 IT3040 – 20212 – 715027 Nguyễn Duy Khánh Linh – 20204839 Bài thực hành 3: Đệ quy khử đệ quy Phần Thực hành đệ quy I Đệ quy – quay lui Bài tập 1: Tính dãy Lucas Dãy Lucas định nghĩa Ln=Ln−1+Ln−2 bắt đầu L0=2, L1=1 Viết hàm tính số Lucas thứ n Bài làm #include int lucas(int n) { if(n==0) return 2; if(n==1) return 1; return lucas(n-1) + lucas(n-2); } // hàm tính số Lucas thứ n int main() { printf("HO VA TEN: Nguyen Duy Khanh Linh\nMSSV: 20204839\n"); int n; scanf("%d", &n); printf("%d", lucas(n)); } Bài tập 2: Quân mã tuần Trên bàn cờ vua kích thước nxn quân mã ô (1, 1) Hãy đưa dãy di chuyển mã cho ô bàn cờ qua lần (ô (1, 1) xem qua) Bài làm IT3040 – 20212 – 715027 Nguyễn Duy Khánh Linh – 20204839 #include using namespace std; int n; int X[100], Y[100]; // lưu tọa độ bước di chuyển quân mã int mark[100][100]; // đánh dấu vị trí ô mà quân mã di chuyển qua //Mảng hx, hy mơ tả vị trí qn mã di chuyển kể từ vị trí const int hx[] = {1, 1, 2, 2, -1, -1, -2, -2}; const int hy[] = {2, -2, 1, -1, 2, -2, 1, -1}; //in dãy di chuyển tìm void printf_sol() { for(int j=1; j =1) && (x n; mark[1][1] = 1; X[1] = Y[1] = 1; TRY(2); return 0; } IT3040 – 20212 – 715027 Nguyễn Duy Khánh Linh – 20204839 II Kỹ thuật nhánh cận Bài tập 3: Bài toán người du lịch Một người xuất phát thành phố 1, muốn thăm tất thành phố khác, thành phố lần quay Chi phí để từ thành phố i sang thành phố j c[i][j] Hãy tìm tổng chi phí nhỏ Bài làm #include using namespace std; #define MAX 100 int n, c[MAX][MAX]; //Số thành phố ma trận chi phí int cmin = INT_MAX; //Chi phí lại nhỏ hai thành phố khác int best = INT_MAX; //Tổng chi phí nhỏ cần tìm, ban đầu đặt giá trị vô lớn INT_MAX = 2^31-1 int curr; //Tổng chi phí tới thời điểm int mark[MAX]; //Đánh dấu thành phó int x[MAX]; // lưu giữ thành phố //Đọc liệu vào void input(){ cin >> n; for (int i = 1; i c[i][j]; if (c[i][j] > 0) cmin = min(cmin, c[i][j]); //Tìm chi phí lại nhỏ } } } //# Thuật toán quay lui void TRY(int k){ for(int i = 2; i

Ngày đăng: 03/03/2023, 06:33

w