Bài tập Kỹ thuật lập trình hướng đối tượng - TS. Nguyễn Duy Phương cung cấp đến học viên các kiến thức bài tập dạng kỹ thuật lập trình với ngôn ngữ Java, bài tập lập trình Java cơ bản; lý thuyết tổ hợp; bài toán đếm, liệt kê, tối ưu; các mô hình thuật toán cơ bản, thuật toán tham lam, thuật toán chia và trị, thuật toán quy hoạch động; lý thuyết đồ thị; các cấu trúc dữ liệu cơ bản;... Mời các bạn cùng tham khảo!
HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG KHOA CƠNG NGHỆ THÔNG TIN - BÀI TẬP KỸ THUẬT LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Học phần tốt nghiệp CNPM Biên soạn: TS NGUYỄN DUY PHƯƠNG ThS NGUYỄN MẠNH SƠN HÀ NỘI 2020 MỤC LỤC MỤC LỤC LỜI NÓI ĐẦU CHƯƠNG KỸ THUẬT LẬP TRÌNH VỚI NGƠN NGỮ JAVA 1.1 Bài tập lập trình Java 1.2 Bài tập Mảng Xâu ký tự 1.3 Bài tập áp dụng Java Collection 13 CHƯƠNG LÝ THUYẾT TỔ HỢP 16 2.1 Bài tập Bài toán đếm 16 2.2 Bài tập Bài toán liệt kê 20 2.3 Bài tập Bài toán tối ưu 23 CHƯƠNG CÁC MƠ HÌNH THUẬT TỐN CƠ BẢN 29 3.1 Bài tập Thuật toán Tham lam 29 3.2 Bài tập Thuật toán Chia trị 34 3.3 Bài tập Thuật toán Quy hoạch động 37 3.4 Bài tập Thuật toán Sắp xếp tìm kiếm 40 CHƯƠNG LÝ THUYẾT ĐỒ THỊ 46 4.1 Bài tập Duyệt đồ thị 46 4.2 Bài tập đồ thị EULER đồ thị HAMILTON 53 4.3 Bài tập đồ thị trọng số 55 CHƯƠNG CÁC CẤU TRÚC DỮ LIỆU CƠ BẢN 64 5.1 Bài tập Ngăn xếp 64 5.2 Bài tập Hàng đợi 69 5.3 Bài tập Cây nhị phân 77 TÀI LIỆU THAM KHẢO 85 LỜI NĨI ĐẦU Mơn học Kỹ thuật lập trình Hướng đối tượng mơn học Thay tốt nghiệp dành cho sinh viên năm cuối chuyên ngành Công nghệ phần mềm Kiến thức kỹ yêu cầu cho môn học tổng hợp kiến thức môn học: Lập trình hướng đối tượng với ngơn ngữ Java Tốn rời rạc Toán rời rạc Cấu trúc liệu giải thuật Theo đề cương môn học, sinh viên cần ôn tập kiến thức giải tập lập trình lập trình thuật tốn với ngơn ngữ lập trình Java Cuốn tập giúp sinh viên hệ thống kiến thức theo mảng giải tập theo thứ tự từ dễ đến khó để q trình luyện tập kỹ thuận lợi Các tập tài liệu trình bày bao gồm: Tên Mô tả đề Các ràng buộc với liệu vào kết Test ví dụ để hiểu đề Tất tập đưa lên cổng thực hành trực tuyến Khoa CNTT1 Trên cổng thực hành có thảo luận gợi ý cho Bộ liệu để chấm cổng thực hành sinh cho phù hợp với đặc trưng ngôn ngữ Java khuyến khích sinh viên sử dụng thư viện Java Collection Tác giả tiếp tục bổ sung tập trình bày hướng dẫn giải phiên Rất mong nhận góp ý q thầy em sinh viên Hà Nội, tháng 12 năm 2020 CHƯƠNG KỸ THUẬT LẬP TRÌNH VỚI NGƠN NGỮ JAVA 1.1 Bài tập lập trình Java BÀI ƯỚC SỐ CHUNG LỚN NHẤT VÀ BỘI SỐ CHUNG NHỎ NHẤT Viết chương trình tìm ước số chung lớn bội số chung nhỏ hai số nguyên dương a,b Dữ liệu vào: Dòng đầu ghi số test Mỗi test ghi dòng số nguyên a b không chữ số Kết quả: Mỗi test ghi dòng, USCLN, sau đến BSCNN Ví dụ: Input Output 12 34 1234 5678 204 3503326 BÀI BẮT ĐẦU VÀ KẾT THÚC Viết chương trình kiểm tra số nguyên dương (2 chữ số trở lên, khơng q chữ số) có chữ số bắt đầu kết thúc hay không Dữ liệu vào: Dòng ghi số test Mỗi test viết dòng số nguyên dương tương ứng cần kiểm tra Kết quả: Mỗi test viết YES NO, tương ứng với liệu vào Ví dụ: Input Output 12451 1000012 YES NO BÀI PHÉP CỘNG Cho phép tốn có dạng a + b = c với a,b,c số nguyên dương có chữ số Hãy kiểm tra xem phép tốn có hay khơng Dữ liệu vào: Chỉ có dịng ghi phép tốn (gồm ký tự) Kết quả: Ghi YES phép tốn Ghi NO sai Ví dụ: Test Test Input + = Input + = Output YES Output NO BÀI CHIA HẾT CHO Cho số nguyên dương N Nhiệm vụ bạn xác định xem có ước số N chia hết cho 2? Dữ liệu vào: Dòng số lượng test T (T ≤ 100) Mỗi test gồm số nguyên N (1 ≤ N ≤ 109) Kết quả: Với test, in đáp án tìm dịng Ví dụ: Input Output BÀI ƯỚC SỐ NGUYÊN TỐ LỚN NHẤT Cho số nguyên dương N Hãy đưa ước số nguyên tố lớn N Input: Dòng đưa vào số lượng test T Những dòng đưa vào T test Mỗi test ghi số nguyên dương N T, N thỏa mãn ràng buộc: 1≤T≤100; 2≤N≤1010 Output: Đưa kết test theo dịng Ví dụ: Input: Output: 315 31 31 BÀI KIỂM TRA SỐ FIBONACCI Cho số nguyên dương n Hãy kiểm tra xem n có phải số dãy Fibonacci hay khơng? Input: Dịng đưa vào số lượng test T Những dòng đưa vào test Mỗi test số nguyên dương n T, n thỏa mãn ràng buộc :1 ≤ T ≤ 100; 1≤n≤1018 Output: Đưa “YES” “NO” tương ứng với n số Fibonacci số Fibonacci test theo dịng Ví dụ: Input Output YES NO 15 BÀI LIỆT KÊ VÀ ĐẾM Cho dãy số nguyên dương không chữ số, số cách vài khoảng trống, xuống dịng Hãy tìm số khơng giảm (các chữ số theo thứ tự từ trái qua phải tạo thành dãy không giảm) đếm số lần xuất số Dữ liệu vào: Gồm số nguyên dương không chữ số Không 100000 số Kết Ghi số không giảm kèm theo số lần xuất Các số liệt kê theo thứ tự xếp số lần xuất giảm dần Các số có số lần xuất số xuất trước in trước Ví dụ: Input Output 123 321 23456 123 123 23456 123 3523 123 321 4567 8988 78 7654 23456 9899 3456 123 678 999 78 3456 78 987654321 4546 63543 4656 13432 4567 4563 123471 659837 454945 34355 3456 9087 9977 98534 3456 23134 678 999 BÀI SỐ TĂNG GIẢM Một số gọi số tăng giảm số có chữ số thỏa mãn tăng dần, giảm dần từ trái qua phải Hãy đếm số nguyên tố số tăng giảm với số chữ số cho trước Dữ liệu vào: Dòng ghi số test Mỗi test viết dòng số chữ số tương ứng cần kiểm tra (lớn nhỏ 10) Kết quả: Ghi số lượng số thỏa mãn điều kiện Input 2 Output 20 50 BÀI PHÂN TÍCH THỪA SỐ NGUN TỐ Hãy phân tích số nguyên dương thành tích thừa số nguyên tố Dữ liệu vào: Dòng ghi số test Mỗi test viết dòng số nguyên dương n không chữ số Kết quả: Mỗi test viết thứ tự test, sau số nguyên tố khác có tích, với số viết thêm số lượng số Xem ví dụ để hiểu rõ cách viết kết Ví dụ Input Output Test 1: 2(2) 3(1) 5(1) 60 Test 2: 2(7) 128 Test 3: 2(4) 5(4) 10000 BÀI 10 SỐ ĐẸP Một số coi đẹp nếu có tính chất thuận nghịch tổng chữ số chia hết cho 10 Bài toán đặt cho trước số chữ số Hãy đếm xem có số đẹp với số chữ số Dữ liệu vào: Dòng ghi số test Mỗi test viết dòng số chữ số tương ứng cần kiểm tra (lớn nhỏ 10) Kết quả: Mỗi test viết số lượng số đẹp tương ứng Input Output 2 90 BÀI 11 SỐ THUẦN NGUYÊN TỐ Một số coi nguyên tố số nguyên tố, tất chữ số nguyên tố tổng chữ số số nguyên tố Bài toán đặt đếm xem đoạn hai số nguyên cho trước có số nguyên tố Dữ liệu vào: Dòng ghi số test Mỗi test viết dòng hai số nguyên dương tương ứng, cách khoảng trống Các số không vượt chữ số Kết quả: Mỗi test viết số lượng số nguyên tố tương ứng Ví dụ Input 23 199 2345 6789 Ouput 15 BÀI 12 GHÉP HÌNH Cho ba hình chữ nhật Các bạn phép xoay hình khơng phép xếp chồng lấn lên nhau, hỏi hình chữ nhật ghép thành hình vng hay khơng Dữ liệu vào: Có ba dịng, dịng ghi hai số nguyên dương chiều rộng chiều cao hình chữ nhật (các số khơng q 100) Kết quả: Ghi YES tạo thành hình vng, NO khơng thể Ví dụ: Input Output YES 1.2 Bài tập Mảng Xâu ký tự BÀI MẢNG ĐỐI XỨNG Nhập dãy số nguyên có n phần tử (n không 100, phần tử dãy khơng q 109) Hãy viết chương trình kiểm tra xem dãy có phải đối xứng hay khơng Nếu in YES, sai in NO Dữ liệu vào: Dòng đầu ghi số test, test gồm hai dòng Dòng đầu số phần tử dãy, dịng sau ghi dãy đó, số cách khoảng trống Kết quả: Ghi YES NO dịng Ví dụ Input Ouput 4 5 5 YES NO BÀI TÍCH MA TRẬN VỚI CHUYỂN VỊ CỦA NÓ Cho ma trận A gồm số ngun dương cấp N*M Hãy viết chương trình tính tích A với ma trận chuyển vị A Dữ liệu vào: Dòng ghi số test Với test: Dòng ghi hai số n m bậc ma trân a; n dòng tiếp theo, dòng ghi m số dòng ma trận A Kết quả: Với test ghi thứ tự test, sau đến ma trận tích tương ứng, số cách khoảng trống Ví dụ Input 2 Output Test 1: 11 11 25 BÀI SỐ TĂNG GIẢM Một số gọi số tăng giảm số có chữ số thỏa mãn không giảm, không tăng từ trái qua phải Hãy kiểm tra xem số có phải số tăng giảm hay khơng Dữ liệu vào: Dịng ghi số test Mỗi test viết dịng số ngun dương cần kiểm tra, khơng q 500 chữ số Kết quả: Mỗi test viết chữ YES số tăng giảm, chữ NO ngược lại Input Output 23455667777777777778888888888899999999 987777777777777777777776554422222221111111111000 43435312432543657657658769898097876465465687987 YES YES NO BÀI CHÈN MẢNG Nhập mảng (a, N) (b, M) số nguyên p (0≤p