BÀI TẬP CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT PHẦN 1 CẤU TRÚC DỮ LIỆU 1) Xây dựng tập thao tác trên danh sách liên kết đơn a Khởi tạo danh sách liên kết đơn b Thêm node vào đầu bên trái danh sách liên kết đơ[.]
BÀI TẬP CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT PHẦN CẤU TRÚC DỮ LIỆU 1) Xây dựng tập thao tác danh sách liên kết đơn a Khởi tạo danh sách liên kết đơn b Thêm node vào đầu bên trái danh sách liên kết đơn c Thêm node vào đầu bên phải danh sách liên kết đơn d Thêm node vào vị trí pos danh sách liên kết đơn e Loại node đầu bên trái danh sách liên kết đơn f Loại node đầu bên phải danh sách liên kết đơn g Loại node vị trí pos danh sách liên kết đơn h Tìm node có giá trị x danh sách liên kết đơn i Duyệt danh sách liên kết đơn j Sắp xếp node danh sách liên kết đơn k Đảo ngược node danh sách liên kết đơn 2) Xây dựng tập thao tác danh sách liên kết đơn vòng a Khởi tạo danh sách liên kết đơn vòng b Thêm node vào đầu bên trái danh sách liên kết đơn vòng c Thêm node vào đầu bên phải danh sách liên kết đơn vòng d Thêm node vào vị trí pos danh sách liên kết đơn vòng e Loại node đầu bên trái danh sách liên kết đơn vòng f Loại node đầu bên phải danh sách liên kết đơn vòng g Loại node vị trí pos danh sách liên kết đơn vịng h Tìm node có giá trị x danh sách liên kết đơn vòng i Duyệt danh sách liên kết đơn vòng j Sắp xếp node danh sách liên kết đơn vòng k Đảo ngược node danh sách liên kết đơn vòng 3) Xây dựng tập thao tác danh sách liên kết đơn xếp a Khởi tạo danh sách liên kết đơn xếp b Thêm node vào đầu bên trái danh sách liên kết đơn xếp c Loại node đầu bên trái danh sách liên kết đơn vòng d Loại node đầu bên phải danh sách liên kết đơn vịng e Loại node vị trí pos danh sách liên kết đơn vịng f Tìm node có giá trị x danh sách liên kết đơn vòng g Duyệt danh sách liên kết đơn vòng h Đảo ngược node danh sách liên kết đơn vòng 4) Xây dựng tập thao tác danh sách liên kết kép a Khởi tạo danh sách liên kết kép b Thêm node vào đầu bên trái danh sách liên kết kép c Thêm node vào đầu bên phải danh sách liên kết kép d Thêm node vào vị trí pos danh sách liên kết kép e Loại node đầu bên trái danh sách liên kết kép f Loại node đầu bên phải danh sách liên kết kép g Loại node vị trí pos danh sách liên kết kép h Tìm node có giá trị x danh sách liên kết kép i Duyệt danh sách liên kết kép j Sắp xếp node danh sách liên kết kép k Đảo ngược node danh sách liên kết kép 5) Xây dựng tập thao tác danh sách liên kết kép vòng a Khởi tạo danh sách liên kết đơn kép vòng b Thêm node vào đầu bên trái danh sách liên kết kép vòng c Thêm node vào đầu bên phải danh sách liên kết kép vòng d Thêm node vào vị trí pos danh sách liên kết kép vòng e Loại node đầu bên trái danh sách liên kết kép vòng f Loại node đầu bên phải danh sách liên kết kép vòng g Loại node vị trí pos danh sách liên kết kép vịng h Tìm node có giá trị x danh sách liên kết kép vòng i Duyệt danh sách liên kết kép vòng j Sắp xếp node danh sách liên kết kép vòng k Đảo ngược node danh sách liên kết kép vòng 6) Xây dựng tập thao tác danh sách liên kết kép xếp (double sorted linked list) a Khởi tạo danh sách liên kết kép xếp b Thêm node vào đầu bên trái danh sách liên kết kép xếp c Loại node đầu bên trái danh sách liên kết kép vòng d Loại node đầu bên phải danh sách liên kết kép vòng e Loại node vị trí pos danh sách liên kết kép vịng f Tìm node có giá trị x danh sách liên kết kép vòng g Duyệt danh sách liên kết kép vòng h Đảo ngược node danh sách liên kết kép vòng 7) Xây dựng tập thao tác đa thức danh sách liên kết a Tạo lập đa thức Pn(x), Qm(x) b Tìm giá trị Pn(x0), Qm(x0) c Tìm R = P + Q d Tìm R = P*Q e Tìm R = P/Q đa thức dư f Tìm đạo hàm bậc l đa thức 8) Xây dựng thao tác ngăn xếp dựa vào cấu trúc liệu mảng : a Kiểm tra tính rỗng ngăn xếp b Kiểm tra tính đầy ngăn xếp c Lấy phần tử đầu ngăn xếp d Lấy kích cỡ ngăn xếp e Đưa phần tử vào ngăn xếp f Lấy phần tử khỏi ngăn xếp g Dịch chuyển biểu thức số học trung tố biểu diễn hậu tố h Tính tốn giá trị biểu thức hậu tố 9) Xây dựng thao tác ngăn xếp dựa vào danh sách liên kết đơn : a Kiểm tra tính rỗng ngăn xếp b Kiểm tra tính đầy ngăn xếp c Lấy phần tử đầu ngăn xếp d Lấy kích cỡ ngăn xếp e Đưa phần tử vào ngăn xếp f Lấy phần tử khỏi ngăn xếp g Dịch chuyển biểu thức số học trung tố biểu diễn hậu tố h Tính tốn giá trị biểu thức hậu tố 10) Xây dựng thao tác ngăn xếp sử dụng STL C++: a Kiểm tra tính rỗng ngăn xếp b Kiểm tra tính đầy ngăn xếp c Lấy kích cỡ ngăn xếp d Lấy phần tử đầu ngăn xếp e Đưa phần tử vào ngăn xếp f Dịch chuyển biểu thức số học trung tố biểu diễn hậu tố g Tính tốn giá trị biểu thức hậu tố 11) Xây dựng thao tác hàng đợi dựa vào mảng: a Kiểm tra tính rỗng hàng đợi b Kiểm tra tính đầy hàng đợi c Lấy kích cỡ hàng đợi d Lấy phần tử đầu hàng đợi e Đưa phần tử vào hàng đợi 12) Xây dựng thao tác hàng đợi vịng dựa vào mảng: a Kiểm tra tính rỗng hàng đợi vịng b Kiểm tra tính đầy hàng đợi vịng c Lấy kích cỡ hàng đợi vịng d Lấy phần tử đầu hàng đợi vòng e Đưa phần tử vào hàng đợi vòng 13) Xây dựng thao tác hàng đợi ưu tiên dựa vào mảng: a Kiểm tra tính rỗng hàng đợi ưu tiên b Kiểm tra tính đầy hàng đợi ưu tiên c Lấy kích cỡ hàng đợi ưu tiên d Lấy phần tử đầu hàng đợi ưu tiên e Đưa phần tử vào hàng đợi ưu tiên 14) Xây dựng thao tác hàng đợi hai điểm cuối dựa vào mảng: a Kiểm tra tính rỗng hàng đợi ưu tiên b Kiểm tra tính đầy hàng đợi ưu tiên c Lấy kích cỡ hàng đợi ưu tiên d Lấy phần tử đầu hàng đợi ưu tiên e Đưa phần tử vào hàng đợi ưu tiên 15) Xây dựng thao tác hàng đợi dựa vào danh sách liên kết đơn: a Kiểm tra tính rỗng hàng đợi b Kiểm tra tính đầy hàng đợi c Lấy kích cỡ hàng đợi d Lấy phần tử đầu hàng đợi e Đưa phần tử vào hàng đợi 16) Xây dựng thao tác hàng đợi vòng dựa vào danh sách liên kết đơn: a Kiểm tra tính rỗng hàng đợi vịng b Kiểm tra tính đầy hàng đợi vịng c Lấy kích cỡ hàng đợi vịng d Lấy phần tử đầu hàng đợi vòng e Đưa phần tử vào hàng đợi vòng 17) Xây dựng thao tác hàng đợi ưu tiên dựa vào danh sách liên kết đơn: a Kiểm tra tính rỗng hàng đợi ưu tiên b Kiểm tra tính đầy hàng đợi ưu tiên c Lấy kích cỡ hàng đợi ưu tiên d Lấy phần tử đầu hàng đợi ưu tiên e Đưa phần tử vào hàng đợi ưu tiên 18) Xây dựng thao tác hàng đợi hai điểm cuối dựa vào danh sách liên kết đơn: a Kiểm tra tính rỗng hàng đợi ưu tiên b Kiểm tra tính đầy hàng đợi ưu tiên c Lấy kích cỡ hàng đợi ưu tiên d Lấy phần tử đầu hàng đợi ưu tiên e Đưa phần tử vào hàng đợi ưu tiên 19) Xây dựng tập thao tác nhị phân dựa vào mảng: a Tạo node gốc cho b Thêm node bên trái cho node x c Thêm node bên phải cho node x d Loại node trái node x e Loại node phải node x f Tìm node có giá trị x g Duyệt theo thứ tự trước đệ qui h Duyệt theo thứ tự đệ qui i Duyệt theo thứ tự sau đệ qui j Duyệt theo thứ tự trước không đệ qui k Duyệt theo thứ tự trước không đệ qui l Duyệt theo thứ tự trước không đệ qui 20) Xây dựng tập thao tác nhị phân dựa vào danh sách liên kết: a Tạo node gốc cho b Thêm node bên trái cho node x c Thêm node bên phải cho node x d Loại node trái node x e Loại node phải node x f Tìm node có giá trị x g Duyệt theo thứ tự trước đệ qui h Duyệt theo thứ tự đệ qui i Duyệt theo thứ tự sau đệ qui j Duyệt theo thứ tự trước không đệ qui k Duyệt theo thứ tự trước không đệ qui l Duyệt theo thứ tự trước không đệ qui 21) Xây dựng tập thao tác MAX HEAP: a Tạo node cho MAX HEAP b Thêm node vào MAX HEAP c Loại node MAX HEAP d Tìm node MAX HEAP e Duyệt MAX HEAP 22) Xây dựng tập thao tác MIN HEAP: a Tạo node cho MIN HEAP b Thêm node vào MIN HEAP c Loại node MIN HEAP d Tìm node MIN HEAP e Duyệt MIN HEAP 23) Xây dựng tập thao tác nhị phân tìm kiếm dựa vào mảng: a Tạo node gốc cho nhị phân tìm kiếm b Thêm node vào nhị phân tìm kiếm c Loại node nhị phân tìm kiếm d Tìm node nhị phân tìm kiếm e Soay phải node nhị phân tìm kiếm f Soay trái node nhị phân tìm kiếm g Duyệt theo thứ tự trước đệ qui h Duyệt theo thứ tự đệ qui i Duyệt theo thứ tự sau đệ qui j Duyệt theo thứ tự trước không đệ qui k Duyệt theo thứ tự trước không đệ qui l Duyệt theo thứ tự trước không đệ qui 24) Xây dựng tập thao tác nhị phân tìm kiếm dựa vào danh sách liên kết: a Tạo node gốc cho nhị phân tìm kiếm b Thêm node vào nhị phân tìm kiếm c Loại node nhị phân tìm kiếm d Tìm node nhị phân tìm kiếm e Soay phải node nhị phân tìm kiếm f Soay trái node nhị phân tìm kiếm g Duyệt theo thứ tự trước đệ qui h Duyệt theo thứ tự đệ qui i Duyệt theo thứ tự sau đệ qui j Duyệt theo thứ tự trước không đệ qui k Duyệt theo thứ tự trước không đệ qui l Duyệt theo thứ tự trước không đệ qui 25) Sử dụng cấu trúc liệu để giải tốn tìm tập từ số lần xuất từ file Phân tích ưu điểm nhược điểm cấu trúc liệu: a Danh sách liên kết đơn b Danh sách liên kết đơn vòng c Danh sách liên đơn xếp d Danh sách liên kết kép e Danh sách liên kết kép vòng f Danh sách liên kép xếp g Cây nhị phân h Cây nhị phân tìm kiếm Cây nhị phân tìm kiếm cân 26) Xây dựng tập thao tác nhiều nhánh a Xây dựng thao tác biểu thức Preoder b Xây dựng thao tác biểu thức Postoder c Xây dựng thao tác biểu thức Intoder d Xây dựng thao tác tiền tố e Xây dựng thao tác Top-Down f Xây dựng thao tác Btree 27) Biểu diễn đồ thị: a Chuyển đổi biểu diễn đồ thị dạng ma trận kề thành biểu diễn danh sách cạnh b Chuyển đổi biểu diễn đồ thị dạng ma trận kề thành biểu diễn danh sách kề c Chuyển đổi biểu diễn đồ thị dạng danh sách cạnh thành biểu diễn ma trận kề d Chuyển đổi biểu diễn đồ thị dạng danh sách cạnh thành biểu diễn danh sách kề e Chuyển đổi biểu diễn đồ thị dạng danh sách kề thành biểu diễn ma trận kề f Chuyển đổi biểu diễn đồ thị dạng danh sách kề thành biểu diễn danh sách kề PHẦN GIẢI THUẬT 28) Các thuật toán xếp a) Thuật toán Selection Sort b) Thuật toán Bubble Sort c) Thuật toán Insertion Sort d) Thuật toán Quick Sort e) Thuật toán Merge Sort f) Thuật toán Sell-Sort g) Thuật toán Radix Sort h) Thuật toán Shaker Sort 29) Các thuật tốn tìm kiếm a) Tìm kiếm tuyến tính b) Tìm kiếm nhị phân c) Tìm kiếm nội suy d) Tìm kiếm Fibonacci e) Tìm kiếm nhị phân f) Tìm kiếm tìm kiếm g) Tìm kiếm dựa vào hàm băm (Hash Function) 30) Thuật toán sinh Sử dụng thuật toán sinh, thực hiện: a Liệt kê xâu nhị phân có độ dài n b Liệt kê tổ hợp chập k 1, ,n c Liệt kê hoán vị 1, 2, , n d Liệt kê cách chia số n thành tổng số tự nhiên nhỏ n e Liệt kê dãy dãy số An cho tổng phần tử dãy K f Liệt kê dãy K phần tử dãy số An cho tổng phần tử dãy M g Giải toán túi thuật toán sinh h Giải toán người du lịch thuật toán sinh i Giải toán n quân hậu thuật toán sinh 31) Thuật toán đệ qui Sử dụng thuật toán đệ qui, thực hiện: a Đổi số tự nhiên n thành số hệ số b b Tìm tổng tất chữ số số tự nhiên n c Tìm tổng tất phần tử dãy số An d Đảo xâu có độ dài n e Thuật tốn Selection Sort đệ qui f Thuật toán Insertion Sort đệ qui g Thuật tốn Sequential Search đệ qui h Tìm kích cỡ nhị phân đệ qui i Xác định hai nhị phân giống đệ qui j Xác định độ cao nhị phân đệ qui k Tạo nên phản chiếu đệ qui l Kiểm tra tổng đệ qui 32) Thuật toán quay lui Sử dụng thuật toán quay lui, thực hiện: a Liệt kê xâu nhị phân có độ dài n b Liệt kê tổ hợp chập k 1, ,n c Liệt kê hoán vị 1, 2, , n d Giải toán túi thuật toán quay lui e Giải toán người du lịch thuật toán quay lui f Giải toán n quân hậu thuật toán quay lui g Giải toán Mã tuần thuật toán quay lui h Giải toán “Tug of War” thuật toán quay lui i Giải toán Sudoku thuật toán quay lui j Giải toán “Đường rắn mê cung” thuật toán quay lui 33) Thuật toán tham lam Sử dụng thuật toán tham lam giải toán đây: a Giải tốn n-ropes b Giải tốn “Activity Selection” khơng trọng số c Giải tốn “Job Sequences” có trọng số d Giải toán túi phương pháp tham lam e Giải toán người du lịch phương pháp tham lam f Giải tốn tìm thời gian nhỏ thực thi tất jop với ràng buộc cho trước g Giải toán đặt lại ký tự xâu cho tất kỹ tự giống có khoảng cách d cho trước h Sinh mã Hufffman phương pháp tham lam i Giải toán Graph Coloring phương pháp tham lam j Thuật tốn PRIM tìm khung nhỏ phương pháp tham lam k Thuật toán Kruskal tìm khung nhỏ phương pháp tham lam l Thuật tốn Dijkstra tìm đường ngắn từ đỉnh đến tất đỉnh lại đồ thị phương pháp tham lam 34) Thuật toán chia trị Sử dụng thuật toán chia trị giải toán đây: a Cài đặt thuật toán nhân nhanh Karatsuba b Cài đặt thuật toán Strassen nhân hai ma trận c Cài đặt thuật toán nhân hai đa thức d Tìm dãy có tổng lớn dãy số e Cài đặt thuật toán Binary-Search f Cài đặt thuật toán Quick-Sort g Cài đặt thuật toán Merge-Sort 35) Thuật toán qui hoạch động Sử dụng thuật toán qui hoạch động giải toán đây: a Nhân hai ma trận b Đếm số cách chia số tự nhiên n thành tổng số nhỏ n c Đếm xâu nhị phân có độ dài n khơng chứa dãy k số liên tiếp d Đếm số xâu nhị phân dộ dài n chứa dãy k số liên tiếp e Đếm số nghiệm nguyên khơng âm phương trình x1 + +Xn =k f Tìm dãy dãy số có tổng phần tử K g Giải toán túi h Giải toán cho thuê máy i Giải toán tìm dãy tăng dài j Giải tốn biến đổi xâu k Tìm xâu chung dài xâu X xâu Y 36) Thuật toán đối sánh mẫu: a Thuật toán Knuth-Morris-Partt b Thuật toán Karp-Rabin c d e f g h i j k Thuật toán Shift-or Thuật toán Simon Thuật toán Colussi Thuật toán Boyer-Moore Thuật toán Not So Naive Thuật toán Zhu-Takaoka Thuật toán Raita Thuật toán KMP Search Thuật toán Alpha Skip Search 37) Sử dụng ngăn xếp xây dựng thuật tốn tìm kiếm theo chiều sâu bắt đầu đỉnh u (DFS(u)) thực hiện: a) Biểu diễn đồ thị danh sách liên kết đơn b) Duyệt tất đỉnh đồ thị thuật tốn tìm DFS(u) c) Xác định thành phần liên thông đồ thị thuật tốn DFS(u) d) Tìm đường từ đỉnh s đến đỉnh t dựa thuật toán thuật tốn DFS(u) e) Kiểm tra tính liên thơng mạnh đồ thị dựa thuật toán DFS(u) f) Xác định đỉnh trụ đồ thị thuật toán DFS (u) g) Xác định cạnh cầu đồ thị thuật toán DFS (u) h) Xác định đỉnh rẽ nhánh cặp đỉnh u,v đồ thị thuật tốn DFS(u) i) Kiểm tra tính định chiều đồ thị thuật toán DFS(u) j) Xây dựng khung đồ thị thuật toán DFS(u) 38) Sử dụng ngăn hàng đợi dựng thuật tốn tìm kiếm theo chiều rộng bắt đầu đỉnh u (BFS(u)) thực hiện: a) Biểu diễn đồ thị danh sách liên kết đơn b) Duyệt tất đỉnh đồ thị thuật tốn tìm BFS(u) c) Xác định thành phần liên thông đồ thị thuật tốn BFS(u) d) Tìm đường từ đỉnh s đến đỉnh t dựa thuật toán thuật toán BFS(u) e) Kiểm tra tính liên thơng mạnh đồ thị dựa thuật toán BFS(u) f) Xác định đỉnh trụ đồ thị thuật toán BFS (u) g) Xác định cạnh cầu đồ thị thuật toán BFS (u) h) Xác định đỉnh rẽ nhánh cặp đỉnh u,v đồ thị thuật toán BFS(u) i) Kiểm tra tính định chiều đồ thị thuật toán BFS(u) j) Xây dựng khung đồ thị thuật toán BFS(u) 39) Cho đồ thị (có hướng + vơ hướng) G = biểu diễn dạng danh sách kề Hãy thực : a) Biểu diễn đồ thị danh sách liên kết đơn b) Tìm chu trình Euler đồ thị vô hướng bắt đầu đỉnh uV dựa vào ngăn xếp c) Tìm chu trình Euler đồ thị có hướng bắt đầu đỉnh uV dựa vào ngăn xếp d) Tìm đường Euler đồ thị vô hướng bắt đầu đỉnh uV dựa vào ngăn xếp e) Tìm đường Euler đồ thị có hướng bắt đầu đỉnh uV dựa vào ngăn xếp f) Liệt kê tất chu trình Hamilton đồ thị bắt đầu đỉnh uV g) Liệt kê tất đường Hamilton đồ thị bắt đầu đỉnh uV 40) Cho đồ thị (có hướng + vơ hướng) G = có trọng số biểu diễn dạng danh sách trọng số Hãy thực : a) Tìm khung nhỏ đồ thị vơ hướng có trọng số thuật tốn Kruskal b) Tìm khung nhỏ đồ thị vơ hướng có trọng số thuật tốn PRIM c) Tìm đường ngắn từ đỉnh u đến tất đỉnh cịn lại đồ thị có trọng số khơng âm thuật tốn Dijkstra d) Tìm đường ngắn từ đỉnh u đến tất đỉnh cịn lại đồ thị có khơng tồn chu trình âm thuật tốn Bellman-Ford e) Tìm đường ngắn từ đỉnh u đến tất đỉnh cịn lại đồ thị có khơng tồn chu trình âm thuật tốn Floyed PHẦN MỘT SỐ BÀI TẬP LÀM THÊM Hãy viết chương trình liệt kê tất số tự nhiên K thỏa mãn đồng thời điều kiện đây: (i) K số có N chữ số (N15); (ii) K số nguyên tố; (iii) K số thuận nghịch (k số thuận nghịch đọc xuôi hay đọc ngược chữ số k ta nhận số Ví dụ số: 30303); (iv) Biểu diễn K hệ số B ( B nhập từ bàn phím số thuận nghịch Ví dụ số k=30303 có biểu diễn hệ số 73137 số thuận nghịch; Hãy viết chương trình liệt kê tất số tự nhiên K thỏa mãn đồng thời điều kiện đây: (i) K số có N chữ số; (ii) K số nguyên tố; (iii) Đảo ngược chữ số K số nguyên tố; (iv) Tổng chữ số K số nguyên tố; (v) Mỗi chữ số K số nguyên tố Hãy viết chương trình liệt kê tất số tự nhiên K thỏa mãn đồng thời điều kiện đây: (i) K số có chữ số; (ii) K số nguyên tố; (iii) Mỗi chữ số K số nguyên tố; (iv) Tổng chữ số K số thuận nghịch hai chữ số; (v) Tích chữ số K số thuận nghịch ba chữ số Hãy viết chương trình liệt kê tất số tự nhiên K thỏa mãn đồng thời điều kiện đây: (i) K số có chữ số; (ii) K số nguyên tố; (iii) Mỗi chữ số K số nguyên tố; (iv) Tổng chữ số K số chia hết cho P (P nhập từ bàn phím); (v) Tích chữ số K số chia hết cho Q (Q nhập từ bàn phím); (vi) Các chữ số K không chứa số R (được nhập từ bàn phím) Hãy viết chương trình liệt kê tất số tự nhiên K thỏa mãn đồng thời điều kiện đây: (i) K số có 5, chữ số; (ii) K số thuận nghịch; (iii) Tổng chữ số K số chia hết cho P (P nhập từ bàn phím); (iv) Tích chữ số K số chia hết cho Q (Q nhập từ bàn phím); (v) Các chữ số K khơng chứa số R (được nhập từ bàn phím) Cho số tự nhiên N, B nhập từ bàn phím (N10000 ; B255) Hãy viết chương trình thực hiện: (i) Tính tổng chữ số N ; (ii) Phân tích N thành tích thừa số nguyên tố ; (iii) Biểu diễn N hệ số B ; (iv) Liệt kê số hoàn hảo nhỏ N ; Số điện thoại di động hãng viễn thông đánh số theo qui cách 091N XXX.XXX Trong đó, N số từ đến 8, X số từ đến Ta định nghĩa loại số điện thoại sau: Số điện thoại loại I (Loại I): Là số có sáu số cuối tạo thành số thuận nghịch sáu chữ số Ví dụ số: 0913.558855 Số điện thoại loại II (Loại II): Là số điện thoại Loại I có tổng sáu chữ số cuối số chia hết cho 10 Ví dụ số: 0913.104.401 (1+0+4+4+0+1=10) Số điện thoại loại III (Loại III): Là số điện thoại Loại II có sáu chữ số cuối không chứa số Ví dụ số: 0913 122.2211 Hãy viết chương trình thực hiện: Liệt kê tất số điện thoại Loại I không chứa số điện thoại Loại II Ghi lại số Loại I vào file Loai1.out theo dịng, dịng khơng q số điện thoại Liệt kê tất số điện thoại Loại II không chứa số điện thoại Loại III Ghi lại số Loại II vào file Loai2.out theo dịng, dịng khơng q số điện thoại Liệt kê tất số điện thoại Loại III Ghi lại số Loại III vào file Loai3.out theo dịng, dịng khơng q số điện thoại Cho cặp số S T số ngun tố có chữ số (Ví dụ S = 1033, T = 8197 số nguyên tố có chữ số) Hãy viết chương trình tìm cách dịch chuyển S thành T thỏa mãn đồng thời điều kiện đây: a) Mỗi phép dịch chuyển phép thay đổi chữ số số bước trước (ví dụ S=1033 phép dịch chuyển S thành 1733 hợp lệ); b) Số nhận số nguyên tố có chữ số (ví dụ S=1033 phép dịch chuyển S thành 1833 không hợp lệ, S dịch chuyển thành 1733 hợp lệ); c) Số bước dịch chuyển Hai số ngun tố có chữ số S T ghi file nguyento.in; hai số ghi cách vài khoảng trống Dãy phép dịch chuyển thỏa mãn điều kiện ghi lại file ketqua.out theo khn dạng: Dịng ghi lại số phép dịch chuyển nhỏ nhất; Dòng ghi lại số nguyên tố dịch chuyển theo chiều ngược lại từ T S theo bước Ví dụ với S = 1033, T = 8179 file nguyento.in cho ta file ketqua.out sau: nguyento.in ketqua.out 1033 8179 8179 8779 3779 3739 3733 1733 1033 31 Ta định nghĩa từ dãy kí tự khơng chứa khoảng trống (space), dấu tab, dấu xuống dòng (‘\n’), dấu đầu dòng (‘\r’) dấu kết thúc dòng (‘\0’) Cho file văn DATA.IN Hãy sử dụng nhị phân tìm kiếm tìm tập từ số lần xuất xuất từ file văn DATA.IN Tập từ tìm ghi lại file Ketqua.out theo khn dạng sau: Dịng ghi lại số tự nhiên K số từ xuất file DATA.IN; K dòng kế tiếp, dòng ghi lại từ số lần xuất từ file DATA.IN Ví dụ minh họa cho file DATA.IN Ketqua.out toán Data.in A AB AC AD AE A AB AE AF Ketqua.out A AB AC AD AE AF 32 Cho file liệu hauto.in theo khn dạng sau: Dịng ghi lại số tự nhiên N số biểu thức số học biểu diễn dạng hậu tố; N dòng kế tiếp, dòng ghi lại biểu thức hậu tố Hãy sử dụng cấu trúc liệu kiểu ngăn xếp viết chương trình tính tốn giá trị biểu thức hậu tố file hauto.in Các biểu thức hậu tố dịch chuyển ghi lại file ketqua.out theo khn dạng sau: Dịng ghi lại số tự nhiên N số biểu thức hậu tố; N dòng kế tiếp, dòng ghi lại giá trị biểu thức hậu tố file Ví dụ minh họa cho file hauto.in ketqua.out hauto.out + – / * + - * ketqua.out 1 33 Cho hai đa thức A bậc n đa thức B bậc m ghi lại tương ứng file dathuc1.in dathuc2.in theo khuôn dạng sau: Dòng ghi lại số tự nhiên K số số hạng đa thức; K dòng kế tiếp, dòng ghi lại hệ số số mũ số hạng hạng đa thức Hãy sử dụng biểu diễn liệu thuật tốn thích hợp viết chương trình tính tổng hai đa thức A B ghi lại đa thức kết vào file ketqua.out theo khn dạng Ví dụ với đa thức Pn ( x ) 10 x 30000 x1000 3x Qm ( x) x 20000 x1000 x 500 x100 x biểu diễn tính tốn cho file kết sau dathuc1.in dathuc2.in ketqua.out 10 30000 20000 10 30000 1000 1000 20000 3 500 1000 100 500 100 34 Cho hai đa thức A bậc n đa thức B bậc m ghi lại tương ứng file dathuc1.in dathuc2.in theo khn dạng sau: Dịng ghi lại số tự nhiên K số số hạng đa thức; K dòng kế tiếp, dòng ghi lại hệ số số mũ số hạng hạng đa thức Hãy sử dụng biểu diễn liệu thuật tốn thích hợp viết chương trình tính hiệu hai đa thức A B ghi lại đa thức kết vào file ketqua.out theo khuôn dạng Ví dụ với đa thức Pn ( x ) 10 x 30000 x1000 3x Qm ( x) x 20000 x1000 x 500 x100 x biểu diễn tính toán cho file kết sau dathuc1.in 10 30000 1000 3 dathuc2.in 20000 1000 500 100 ketqua.out 10 30000 -8 20000 1000 -3 500 -7 100 -6 35 Cho mạng gồm N máy tính Biết hai máy tính nối với hệ thống cable trực tiếp gián tiếp thơng qua số máy tính trung gian Để tiết kiệm cable nối, người ta nghĩ cách loại bỏ số đường cable cho ta nhận mạng máy tính liên thơng Hãy sử dụng biểu diễn liệu thuật tốn thích hợp viết chương trình bỏ đường cable cho mạng máy tính cho hai điều kiện sau thỏa mãn: (i) Số đường cable loại bỏ nhiều được; (ii) Số đường cable vào máy tính thứ K (1KN) Dữ liệu vào cho file mang.in theo khuôn dạng sau: Dòng ghi lại hai số tự nhiên N K Hai số viết cách vài khoảng trống N dòng ghi lại ma trận vuông Aij (i, j = 1, 2, , N) biểu diễn tuyến cable nối Trong đó, Aij = biểu thị từ máy tính thứ i máy tính thứ j có đường cable nối trực tiếp; Aij = biểu thị từ máy tính thứ i máy tính thứ j khơng có đường cable nối trực tiếp; Mạng máy tính liên thơng với tối thiểu đường cable nối tìm ghi lại file ketqua.out theo khuôn dạng sau: Dòng ghi lại số N số máy tính mạng M số đường cable cịn lại nối máy tính; M dịng ghi lại đường cable nối trực tiếp từ máy tính i đến máy tính j Giá trị i j viết cách vài khoảng trống Ví dụ với mạng máy tính cho file mang.in cho ta file ketqua.out tương ứng mang.in 1 1 1 1 1 1 1 1 ketqua.out 2 3 4 36 Cho mạng gồm N máy tính Biết hai máy tính nối với hệ thống cable trực tiếp gián tiếp thơng qua số máy tính trung gian Để tiết kiệm cable nối, người ta nghĩ cách loại bỏ số đường cable cho ta nhận mạng máy tính liên thơng Hãy sử dụng biểu diễn liệu thuật tốn thích hợp viết chương trình bỏ đường cable cho mạng máy tính cho hai điều kiện sau thỏa mãn: (iii) Số đường cable loại bỏ nhiều được; (iv) Số đường cable vào máy tính thứ K (1KN) nhiều Dữ liệu vào cho file mang.in theo khuôn dạng sau: Dòng ghi lại hai số tự nhiên N K Hai số viết cách vài khoảng trống N dòng ghi lại ma trận vuông Aij (i, j = 1, 2, , N) biểu diễn tuyến cable nối Trong đó, Aij = biểu thị từ máy tính thứ i máy tính thứ j có đường cable nối trực tiếp; Aij = biểu thị từ máy tính thứ i máy tính thứ j khơng có đường cable nối trực tiếp; Mạng máy tính liên thơng với tối thiểu đường cable nối tìm ghi lại file ketqua.out theo khuôn dạng sau: Dòng ghi lại số N số máy tính mạng M số đường cable cịn lại nối máy tính; M dịng ghi lại đường cable nối trực tiếp từ máy tính i đến máy tính j Giá trị i j viết cách vài khoảng trống Ví dụ với mạng máy tính cho file mang.in cho ta file ketqua.out tương ứng mang.in 1 1 1 1 1 1 1 1 ketqua.out 4 37 Cho đồ thị vơ hướng liên thơng có trọng số G = file dothi.in biểu diễn dạng danh sách cạnh theo khn dạng sau: Dịng ghi lại số tự nhiên N, M tương ứng với số đỉnh số cạnh đồ thị M dòng dòng ghi lại ba số i, j, w tương ứng với đỉnh đầu, đỉnh cuối trọng số cạnh tương ứng Hãy sử dụng thuật tốn Kruskal, viết chương trình tìm khung nhỏ đồ thị Cây khung nhỏ tìm ghi lại file caykhung.out theo khn dạng: Dịng ghi lại độ dài khung nhỏ nhất; Những dòng kế tiếp, dòng ghi lại ba số i, j, w tương ứng với đỉnh đầu, đỉnh cuối trọng số cạnh tương ứng khung Ví dụ minh họa cho file dothi.in caykhung.out đồ thị dothi.in 5 4 ketqua.out 10 3 4 38 Cho đồ thị vơ hướng liên thơng có trọng số G = file dothi.in biểu diễn dạng danh sách cạnh theo khuôn dạng sau: Dòng ghi lại số tự nhiên N, M tương ứng với số đỉnh số cạnh đồ thị M dòng dòng ghi lại ba số i, j, w tương ứng với đỉnh đầu, đỉnh cuối trọng số cạnh tương ứng Hãy sử dụng thuật tốn Prim, viết chương trình tìm khung nhỏ đồ thị bắt đầu đỉnh u=1 Cây khung nhỏ tìm ghi lại file caykhung.out theo khn dạng: Dịng ghi lại độ dài khung nhỏ nhất; Những dòng kế tiếp, dòng ghi lại ba số i, j, w tương ứng với đỉnh đầu, đỉnh cuối trọng số cạnh tương ứng khung Ví dụ minh họa cho file dothi.in caykhung.out đồ thị dothi.in 5 4 ketqua.out 10 3 4 39 Một người quản lý có n cơng việc cần thực lúc Biết có n cơng nhân, cơng nhân thực tất công việc với thời gian khác Thời gian để công nhân thứ i thực công việc j Ci,j (tính theo giờ) Hãy viết chương trình tìm cách xếp n cơng việc cho n cơng nhân cho tổng thời gian thực nhỏ Dữ liệu vào cho file: VIEC.INP đó: - Dịng thứ ghi số N ; - N dòng ghi giá trị ma trận thời gian C Hai phần tử khác viết cách vài khoảng trống Kết tìm lưu vào file KETQUA.OUT đó: - Dịng thứ ghi giá trị tổng thơi gian nhỏ đạt - Dòng thứ hai ghi cách bố trí việc cho ơng thợ Ví dụ: File VIEC.INP KETQUA.OUT VIEC.INP 10 64 34 20 57 49 29 21 28 16 15 12 57 19 40 46 11 15 29 71 16 26 21 48 18 16 11 21 21 37 15 12 19 18 37 30 KETQUA.OUT 82 40 Cho đồ thị có hướng G = gồm N đỉnh M cạnh biểu diễn dạng danh sách kề file dske.in theo khn dạng sau: Dịng ghi lại số tự nhiên N số đỉnh đồ thị; N dòng dòng ghi lại danh sách kề đỉnh tương ứng Hai đỉnh danh sách kề phân biệt với vài kí tự trống, đỉnh khơng có cạnh nối với (đỉnh lập) ghi giá trị Hãy viết chương trình kiểm tra đưa thông báo: a) “Đồ thị liên thông mạnh” G liên thông mạnh; b) “Đồ thị liên thông yếu” G không liên G liên thông yếu; c) “Đồ thị không liên thông mạnh, không liên thơng yếu” trường hợp cịn lại Ví dụ với đồ thị biểu diễn dạng danh sách kề dưới, kết thực chương trình “ Đồ thị liên thông mạnh” dske.in 5 5 41 Cho đồ thị vô hướng liên thông gồm N đỉnh G = Sử dụng thuật tốn BFS, viết chương trình xây dựng khung đồ thị bắt đầu đỉnh u Dữ liệu vào cho file dothi.in biểu diễn đồ thị danh sách kề theo khuôn dạng sau: Dòng ghi lại hai số tự nhiên N, u tương ứng với số đỉnh đồ thị đỉnh bắt đầu xây dựng khung Hai số viết cách vài khoảng trống N dòng kế tiếp, dòng ghi lại danh sách kề đỉnh tương ứng, hai đỉnh khác danh sách kề ghi cách vài ký tự trống Cây khung xây dựng từ đỉnh u tìm ghi lại file cay.out theo khn dạng sau: Dịng ghi lại số N, M tương ứng với số đỉnh số cạnh khung Hai số viết cách vài ký tự trống; M dòng ghi lại cạnh khung, đỉnh đầu đỉnh cuối cạnh ghi cách vài ký tự trống Ví dụ với đồ thị G= tổ chức file dothi.in cho ta file cay.out tương ứng dothi.in 3 5 cay.out 1 1 4 42 Cho đồ thị vô hướng liên thông gồm N đỉnh G = Sử dụng thuật tốn DFS, viết chương trình xây dựng khung đồ thị bắt đầu đỉnh u Dữ liệu vào cho file dothi.in biểu diễn đồ thị danh sách kề theo khn dạng sau: Dịng ghi lại hai số tự nhiên N, u tương ứng với số đỉnh đồ thị đỉnh bắt đầu xây dựng khung Hai số viết cách vài khoảng trống N dòng kế tiếp, dòng ghi lại danh sách kề đỉnh tương ứng, hai đỉnh khác danh sách kề ghi cách vài ký tự trống Cây khung xây dựng từ đỉnh u tìm ghi lại file cay.out theo khn dạng sau: Dịng ghi lại số N, M tương ứng với số đỉnh số cạnh khung Hai số viết cách vài ký tự trống; M dòng ghi lại cạnh khung, đỉnh đầu đỉnh cuối cạnh ghi cách vài ký tự trống Ví dụ với đồ thị G= tổ chức file dothi.in cho ta file cay.out tương ứng dothi.in 3 5 cay.out 1 1 4 43 Cho đồ thị vô hướng liên thông gồm N đỉnh G = Sử dụng thuật toán BFS, viết chương trình xây dựng khung đồ thị bắt đầu đỉnh u Dữ liệu vào cho file dothi.in biểu diễn đồ thị dạng danh sách cạnh theo khn dạng sau: Dịng ghi lại ba số tự nhiên N, M u tương ứng với số đỉnh, số cạnh đồ thị đỉnh bắt đầu xây dựng khung Ba số viết cách vài khoảng trống M dòng kế tiếp, dòng ghi lại cạnh đồ thị, đỉnh đầu đỉnh cuối cạnh viết cách vài khoảng trống Cây khung xây dựng từ đỉnh u tìm ghi lại file cay.out theo khn dạng sau: Dịng ghi lại số N, K tương ứng với số đỉnh số cạnh khung Hai số viết cách vài ký tự trống; K dòng ghi lại cạnh khung, đỉnh đầu đỉnh cuối cạnh ghi cách vài ký tự trống Ví dụ với đồ thị G= tổ chức file dothi.in cho ta file cay.out tương ứng dothi.in 1 1 2 4 5 cay.out 1 1 4 44 Cho đồ thị vô hướng liên thông gồm N đỉnh G = Sử dụng thuật toán DFS, viết chương trình xây dựng khung đồ thị bắt đầu đỉnh u Dữ liệu vào cho file dothi.in biểu diễn đồ thị dạng danh sách cạnh theo khuôn dạng sau: Dòng ghi lại ba số tự nhiên N, M u tương ứng với số đỉnh, số cạnh đồ thị đỉnh bắt đầu xây dựng khung Ba số viết cách vài khoảng trống M dòng kế tiếp, dòng ghi lại cạnh đồ thị, đỉnh đầu đỉnh cuối cạnh viết cách vài khoảng trống Cây khung xây dựng từ đỉnh u tìm ghi lại file cay.out theo khuôn dạng sau: Dòng ghi lại số N, K tương ứng với số đỉnh số cạnh khung Hai số viết cách vài ký tự trống; K dòng ghi lại cạnh khung, đỉnh đầu đỉnh cuối cạnh ghi cách vài ký tự trống Ví dụ với đồ thị G= tổ chức file dothi.in cho ta file cay.out tương ứng dothi.in 1 1 2 cay.out 4 5 4 45 Cho đồ thị vô hướng liên thông gồm N đỉnh G = Sử dụng thuật tốn BFS, viết chương trình xây dựng khung đồ thị bắt đầu đỉnh u Dữ liệu vào cho file dothi.in biểu diễn đồ thị dạng ma trận kề theo khuôn dạng sau: Dòng ghi lại hai số tự nhiên N, u tương ứng với số đỉnh đỉnh bắt đầu xây dựng khung Hai số viết cách vài khoảng trống N dòng ghi lại ma trận kề đồ thị, hai phần tử khác ma trận kề viết cách vài khoảng trống Cây khung xây dựng từ đỉnh u tìm ghi lại file cay.out theo khn dạng sau: Dịng ghi lại số N, K tương ứng với số đỉnh số cạnh khung Hai số viết cách vài ký tự trống; K dòng ghi lại cạnh khung, đỉnh đầu đỉnh cuối cạnh ghi cách vài ký tự trống Ví dụ với đồ thị G= tổ chức file dothi.in cho ta file cay.out tương ứng dothi.in 1 1 1 1 1 1 1 1 cay.out 1 1 4 46 Cho đồ thị vô hướng liên thông G = gồm N đỉnh biểu diễn dạng ma trận kề file dothi.in theo khn dạng sau: Dịng ghi lại hai số tự nhiên N tương ứng với số đỉnh đồ thị; N dòng ghi lại ma trận kề đồ thị, hai phần tử khác ma trận kề viết cách vài khoảng trống Hãy viết chương trình kiểm tra G có phải đồ thị Euler hay khơng? Nếu G đồ thị Euler xây dựng chu trình Euler đồ thị bắt đầu đỉnh u (u nhập từ bàn phím), ngược lại đưa thơng báo “G khơng đồ thị Euler”? Ví dụ với đồ thị cho ta chu trình Euler bắt đầu đỉnh số : - - - - dothi.in 1 0 1 0 1 1 47 Cho đồ thị có hướng liên thông yếu G = gồm N đỉnh biểu diễn dạng ma trận kề file dothi.in theo khn dạng sau: Dịng ghi lại hai số tự nhiên N tương ứng với số đỉnh đồ thị; N dòng ghi lại ma trận kề đồ thị, hai phần tử khác ma trận kề viết cách vài khoảng trống Hãy viết chương trình kiểm tra G có phải đồ thị Euler hay khơng? Nếu G đồ thị Euler xây dựng chu trình Euler đồ thị bắt đầu đỉnh u (u nhập từ bàn phím), ngược lại đưa thơng báo “G khơng đồ thị Euler”? Ví dụ với đồ thị cho ta chu trình Euler bắt đầu đỉnh số : - - - - dothi.in 0 0 0 0 0 48 Cho đồ thị vô hướng liên thông G = gồm N đỉnh biểu diễn dạng danh sách kề file dothi.in theo khn dạng sau: Dịng ghi lại hai số tự nhiên N tương ứng với số đỉnh đồ thị; N dòng kế tiếp, dòng ghi lại danh sách kề đỉnh tương ứng, hai đỉnh khác danh sách kề ghi cách vài ký tự trống Hãy viết chương trình kiểm tra G có phải đồ thị Euler hay không? Nếu G đồ thị Euler, xây dựng chu trình Euler đồ thị bắt đầu đỉnh u (u nhập từ bàn phím), ngược lại đưa thơng báo “G khơng đồ thị Euler”? Ví dụ với đồ thị cho ta chu trình Euler bắt đầu đỉnh số : - - - - dothi.in 4 49 Cho đồ thị vô hướng liên thông G = gồm N đỉnh biểu diễn dạng ma trận kề file dothi.in theo khn dạng sau: Dịng ghi lại hai số tự nhiên N tương ứng với số đỉnh đồ thị; N dòng ghi lại ma trận kề đồ thị, hai phần tử khác ma trận kề viết cách vài khoảng trống Hãy viết chương trình kiểm tra G có phải đồ thị nửa Euler hay không? Nếu G đồ thị nửa Euler xây dựng đường Euler đồ thị, ngược lại đưa thông báo “G khơng đồ thị nửa Euler”? Ví dụ với đồ thị cho ta đường Euler : - - - - - dothi.in 1 1 1 1 1 50 Cho đồ thị có hướng liên thơng yếu G = gồm N đỉnh biểu diễn dạng ma trận kề file dothi.in theo khuôn dạng sau: Dòng ghi lại hai số tự nhiên N tương ứng với số đỉnh đồ thị; N dòng ghi lại ma trận kề đồ thị, hai phần tử khác ma trận kề viết cách vài khoảng trống Hãy viết chương trình kiểm tra G có phải đồ thị nửa Euler hay không? Nếu G đồ thị nửa Euler xây dựng đường Euler đồ thị, ngược lại đưa thông báo “G khơng đồ thị nửa Euler”? Ví dụ với đồ thị cho ta đường Euler : - - - - - dothi.in 0 0 0 0 1 51 Cho đồ thị vô hướng G = gồm N đỉnh M cạnh biểu diễn dạng danh sách kề file dske.in theo khn dạng sau: Dịng ghi lại số tự nhiên N số đỉnh đồ thị; N dòng dòng ghi lại danh sách kề đỉnh tương ứng Hai đỉnh danh sách kề phân biệt với vài kí tự trống, đỉnh khơng có cạnh nối với (đỉnh lập) ghi giá trị Hãy viết chương trình chuyển đổi biểu diễn đồ thị G dạng danh sách kề thành biểu diễn đồ thị G dạng ma trận kề danh sách cạnh Khuôn dạng biểu diễn đồ thị G dạng ma trận kề, danh sách kề ghi lại file mtke.out dscanh.out theo khn dạng sau: Khn dạng file mtke.out: Dịng ghi lại số tự nhiên n số đỉnh đồ thị; N dòng ghi lại ma trận kề đồ thị, hai phần tử khác ma trận kề ghi cách vài ký tự trống Khuôn dạng file dscanh.out Dòng ghi lại số tự nhiên N M tương ứng với số đỉnh số cạnh đồ thị, hai số ghi cách vài ký tự trống; M dòng dòng ghi lại cạnh đồ thị, đỉnh đầu đỉnh cuối cạnh ghi cách vài ký tự trống Ví dụ đồ thị gồm đỉnh, cạnh biểu diễn file dske.in cho ta file mtke.out dscanh.out tương ứng dske.in mtke.out dscanh.out 5 1 0 0 1 0 0 0 0 52 Cho đồ thị có hướng G = gồm N đỉnh M cạnh biểu diễn dạng danh sách kề file dske.in theo khuôn dạng sau: Dòng ghi lại số tự nhiên N số đỉnh đồ thị; N dòng dòng ghi lại danh sách kề đỉnh tương ứng Hai đỉnh danh sách kề phân biệt với vài kí tự trống, đỉnh khơng có cạnh nối với (đỉnh lập) ghi giá trị Hãy viết chương trình chuyển đổi biểu diễn đồ thị G dạng danh sách kề thành biểu diễn đồ thị G dạng ma trận kề danh sách cạnh Khuôn dạng biểu diễn đồ thị G dạng ma trận kề, danh sách kề ghi lại file mtke.out dscanh.out theo khuôn dạng sau: Khuôn dạng file mtke.out: Dòng ghi lại số tự nhiên n số đỉnh đồ thị; N dòng ghi lại ma trận kề đồ thị, hai phần tử khác ma trận kề ghi cách vài ký tự trống Khn dạng file dscanh.out Dịng ghi lại số tự nhiên N M tương ứng với số đỉnh số cạnh đồ thị, hai số ghi cách vài ký tự trống; M dòng dòng ghi lại cạnh đồ thị, đỉnh đầu đỉnh cuối cạnh ghi cách vài ký tự trống Ví dụ đồ thị gồm đỉnh, cạnh biểu diễn file dske.in cho ta file mtke.out dscanh.out tương ứng dske.in mtke.out dscanh.out 5 0 0 1 0 5 0 0 0 5