Bài tập lý thuyết lập trình hướng đối tượng

ÔN TẬP LÝ THUYẾT LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Câu 1: Phương pháp lập trình hướng đối tượng gì? Lấy đối tượng làm tảng để xây dựng thuật giải, xây dựng chương trình - Dựa kiến trúc lớp [class] đối tượng [object] Câu 2: Đối tượng gì? : Là thực thể bao gồm thuộc tính hành động Câu 3: Lớp đối tượng gì? Tập hợp đối tượng có đặc tính tương tự Một class đặc trưng thuộc tính, hành động [hành vi, thao tác] • Thuộc tính: thành phần đối tượng, có giá trị định cho đối tượng thời điểm hệ thống • Thao tác: thể hành vi đối tượng tác động qua lại với đối tượng khác với Câu 4: Các đặc điểm quan trọng OOP - Các lớp đối tượng – Classes - Đóng gói – Encapsulation [dùng để che giấu thông tin] - Thừa kế - Inheritance - Đa hình – Polymorphism Câu 5: Phạm vi truy xuất - Gồm từ khóa: public, private, protected để xác định phạm vi truy xuất - Public: Các thành phần mang thuộc tinh truy cập từ hàm nào, dù hay lớp - Private: Các thành phần mang thuộc tí nh truy cậpbên phạm vi lớp - Protected: Các thành phần mang thuộc tinh truy cập bên phạm vi lớp lớp kế thừa  lớp có nhiều nhãn private public, nhãn có phạm vi ảnh hướng gặp nhãn hết khai báo lớp Câu 6: Constructor gì? Dùng làm gì? Tên, kiểu liệu trả về? Danh sách tham số? Thế constructor mạc đinh? - Constructor [Hàm thiết lập] loại phương thức đặc biệt dùng để khởi tạo thể lớp - Constructor dùng thiết lập để khởi tạo giá trị thành phần đối tượng - Constructor khai báo giống phương thức, tên trùng tên lớp, giá trị trả [kể void] - Constructor phải có thuộc tính public - Contructor có tham số - Contructor mạc định gọi thể khai báo mà đối số cung cấp Ôn tập lý thuyết Lập trình hướng đối tượng – Lâm Vĩnh Nguyên Ôn tập lý thuyết Lập trình hướng đối tượng – Lâm Vĩnh Nguyên Câu 7: Destructor gì? - Destructor hàm hủy bỏ gọi trước đối tượng bị thu hồi, dùng để dọn dẹp cần thiết trước đối tượng bị hủy - Một class có Destructor - Tên trùng lớp có dấu ~ đặt trước - Được tự động gọi đối tượng hết phạm vi sử dụng - Destructor có thuộc tính public Câu 8: Kế thừa gì? Cách khai báo, ví dụ minh họa - Kế thừa dùng để biểu diễn mối quan hệ đặc biệt hóa- tổng quát hóa lớp Các lớp trừu tượng hóa tôt chức thành sơ đồ phân cấp lớp - Các lớp có đặc điểm tương tự tổ chức thành sơ đồ phân cấp kế thừa [cây kế thừa] - Cách khai báo: class LopCha { // Thành phần lớp sở }; class LopCon: [Từ khóa dẫn xuất: public/private/protected] LopCha { //Thành phần bổ sung lớp dẫn xuất }; - Ví dụ: class Nguoi { protected: string Ten public: void Nhap[]; void Xuat[]; Nguoi[]; ~Nguoi[]; }; class Bitch:public Nguoi { private: string DiaBan; int Gia; public: void Nhap[]; void Xuat[]; Bitch[]; ~Bitch[]; }; Ôn tập lý thuyết Lập trình hướng đối tượng – Lâm Vĩnh Nguyên Ôn tập lý thuyết Lập trình hướng đối tượng – Lâm Vĩnh Nguyên Câu 9: Phạm vi truy xuất[để phân biệt phần với chương 3, hỏi phần có từ khóa “kế thừa” hay “dẫn xuất”] Từ khóa dẫn xuất Private Protected public X X X Private Protected Protected Private Protected Public Phạ m vi t ruy c ậ p Private Protected Public Cách đọc: - Thành phần private lớp cha không truy xuất - Thành phần………… lớp cha kế thừa từ khóa dẫn xuất…… trở thành………… lớp Câu 10: Phương thức ảo gì? Những lưu ý sử dụng phương thức ảo? - Là cách thể tính đa tình C++ - Các phương thức lớp sở có tính đa hình phải định nghĩa phương thức ảo - Lưu ý: • PTA hoạt động thông qua trỏ • Muốn hàm trờ thành phương thức ảo có cách Thêm từ khóa virtual vào trước khai báo hàm Ví dụ: virtual void Nhap[]; Hoặc phương thức tương ứng lớp sở phương thức ảo • PTA hoạt động phương thức lớp sở lớp có nghi thức giao tiếp GIỐNG HỆT • Nếu lớp không định nghĩa lại phương thức ảo gọi phương thức lớp sở [gần có định nghĩa] Câu 11: Phương thức ảo gì? - Là phương thức ảo nội dung Câu 12: Lớp trừu tượng gì? - Là lớp sở đối tượng thuộc CHÚC CÁC BẠN THI TỐT!!! Ôn tập lý thuyết Lập trình hướng đối tượng – Lâm Vĩnh Nguyên Ôn tập lý thuyết Lập trình hướng đối tượng – Lâm Vĩnh Nguyên

Ngày đăng: 24/06/2016, 22:48

Xem thêm: ÔN tập lý THUYẾT OOP, ÔN tập lý THUYẾT OOP

DownloadVui lòng tải xuống để xem tài liệu đầy đủ

Nội dung Text: Bài tập Kỹ thuật lập trình hướng đối tượng - TS. Nguyễn Duy Phương

  1. HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG KHOA CÔNG NGHỆ THÔNG TIN 1 ----- 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 1 Biên soạn: TS. NGUYỄN DUY PHƯƠNG ThS. NGUYỄN MẠNH SƠN HÀ NỘI 2020
  2. MỤC LỤC MỤC LỤC ...................................................................................................................... 2 LỜI NÓI ĐẦU ................................................................................................................ 3 CHƯƠNG 1. KỸ THUẬT LẬP TRÌNH VỚI NGÔN NGỮ JAVA .............................. 4 1.1. Bài tập lập trình Java cơ bản ............................................................................... 4 1.2. Bài tập về Mảng và Xâu ký tự ............................................................................. 8 1.3 Bài tập cơ bản áp dụng Java Collection ............................................................ 13 CHƯƠNG 2. LÝ THUYẾT TỔ HỢP .......................................................................... 16 2.1. Bài tập về Bài toán đếm..................................................................................... 16 2.2. Bài tập về Bài toán liệt kê .................................................................................. 20 2.3. Bài tập về Bài toán tối ưu .................................................................................. 23 CHƯƠNG 3. CÁC MÔ HÌNH THUẬT TOÁN CƠ BẢN .......................................... 29 3.1. Bài tập về Thuật toán Tham lam ....................................................................... 29 3.2. Bài tập về Thuật toán Chia và trị ....................................................................... 34 3.3. Bài tập về Thuật toán Quy hoạch động ............................................................. 37 3.4. Bài tập về Thuật toán Sắp xếp và tìm kiếm ....................................................... 40 CHƯƠNG 4. LÝ THUYẾT ĐỒ THỊ ........................................................................... 46 4.1. Bài tập về Duyệt đồ thị ...................................................................................... 46 4.2. Bài tập về đồ thị EULER và đồ thị HAMILTON ............................................. 53 4.3. Bài tập về đồ thị trọng số ................................................................................... 55 CHƯƠNG 5. CÁC CẤU TRÚC DỮ LIỆU CƠ BẢN ................................................. 64 5.1. Bài tập về Ngăn xếp........................................................................................... 64 5.2. Bài tập về Hàng đợi ........................................................................................... 69 5.3. Bài tập về Cây nhị phân ..................................................................................... 77 TÀI LIỆU THAM KHẢO ............................................................................................ 85 2
  3. LỜI NÓI ĐẦU Môn học Kỹ thuật lập trình Hướng đối tượng là môn học Thay thế tốt nghiệp 1 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 và kỹ năng yêu cầu cho môn học này là sự tổng hợp kiến thức của các môn học:  Lập trình hướng đối tượng với ngôn ngữ Java  Toán rời rạc 1 và Toán rời rạc 2  Cấu trúc dữ liệu và giải thuật Theo đề cương môn học, sinh viên cần ôn tập kiến thức và giải quyết được các bài tập lập trình cơ bản và lập trình thuật toán với ngôn ngữ lập trình Java. Cuốn bài tập này sẽ giúp sinh viên hệ thống kiến thức theo từng mảng và giải các bài tập theo thứ tự từ dễ đến khó để quá trình luyện tập kỹ năng được thuận lợi hơn. Các bài tập trong tài liệu này được trình bày bao gồm:  Tên bài  Mô tả đề bài  Các ràng buộc với dữ liệu vào và kết quả  Test ví dụ để hiểu đề Tất cả các bài tập đều đã được đưa lên cổng thực hành trực tuyến của Khoa CNTT1. Trên cổng thực hành đã có các thảo luận và gợi ý cho từng bài. Bộ dữ liệu để chấm trên cổng thực hành đã được sinh cho phù hợp với các đặc trưng của ngôn ngữ Java và khuyến khích sinh viên sử dụng thư viện Java Collection. Tác giả sẽ tiếp tục bổ sung các bài tập và trình bày các hướng dẫn giải trong các phiên bản tiếp theo. Rất mong nhận được sự góp ý của quý thầy cô và các em sinh viên. Hà Nội, tháng 12 năm 2020 3
  4. CHƯƠNG 1. KỸ THUẬT LẬP TRÌNH VỚI NGÔN NGỮ JAVA 1.1. Bài tập lập trình Java cơ bản BÀI 1. ƯỚ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 nhất và bội số chung nhỏ nhất của hai số nguyên dương a,b. Dữ liệu vào: Dòng đầu ghi số bộ test. Mỗi bộ test ghi trên một dòng 2 số nguyên a và b không quá 9 chữ số. Kết quả: Mỗi bộ test ghi trên 1 dòng, lần lượt là USCLN, sau đó đến BSCNN. Ví dụ: Input Output 2 2 204 12 34 2 3503326 1234 5678 BÀI 2. BẮT ĐẦU VÀ KẾT THÚC Viết chương trình kiểm tra một số nguyên dương bất kỳ [2 chữ số trở lên, không quá 9 chữ số] có chữ số bắt đầu và kết thúc bằng nhau hay không. Dữ liệu vào: Dòng đầu tiên ghi số bộ test. Mỗi bộ test viết trên một dòng số nguyên dương tương ứng cần kiểm tra. Kết quả: Mỗi bộ test viết ra YES hoặc NO, tương ứng với bộ dữ liệu vào Ví dụ: Input Output 2 YES 12451 NO 1000012 BÀI 3. PHÉP CỘNG Cho một phép toán có dạng a + b = c với a,b,c chỉ là các số nguyên dương có một chữ số. Hãy kiểm tra xem phép toán đó có đúng hay không. Dữ liệu vào: Chỉ có một dòng ghi ra phép toán [gồm đúng 9 ký tự] Kết quả: Ghi ra YES nếu phép toán đó đúng. Ghi ra NO nếu sai. 4
  5. Ví dụ: Test 1 Test 2 Input Input 1 + 2 = 3 2 + 2 = 5 Output Output YES NO BÀI 4. CHIA HẾT CHO 2 Cho số nguyên dương N. Nhiệm vụ của bạn là hãy xác định xem có bao nhiêu ước số của N chia hết cho 2? Dữ liệu vào: Dòng đầu tiên là số lượng bộ test T [T ≤ 100]. Mỗi bộ test gồm một số nguyên N [1 ≤ N ≤ 109] Kết quả: Với mỗi test, in ra đáp án tìm được trên một dòng. Ví dụ: Input Output 2 0 9 3 8 BÀI 5. ƯỚC SỐ NGUYÊN TỐ LỚN NHẤT Cho số nguyên dương N. Hãy đưa ra ước số nguyên tố lớn nhất của N. Input:  Dòng đầu tiên đưa vào số lượng bộ test T.  Những dòng kế tiếp đưa vào T bộ test. Mỗi bộ 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 ra kết quả mỗi test theo từng dòng. Ví dụ: Input: Output: 2 7 315 31 31 5
  6. BÀI 6. KIỂM TRA SỐ FIBONACCI Cho số nguyên dương n. Hãy kiểm tra xem n có phải là số trong dãy Fibonacci hay không? Input:  Dòng đầu tiên đưa vào số lượng bộ test T.  Những dòng kế tiếp đưa vào các bộ test. Mỗi bộ test là một số nguyên dương n.  T, n thỏa mãn ràng buộc :1 ≤ T ≤ 100; 1≤n≤1018. Output:  Đưa ra “YES” hoặc “NO” tương ứng với n là số Fibonacci hoặc không phải số Fibonacci của mỗi test theo từng dòng. Ví dụ: Input Output 2 YES 8 NO 15 BÀI 7. LIỆT KÊ VÀ ĐẾM Cho một dãy các số nguyên dương không quá 9 chữ số, mỗi số cách nhau vài khoảng trống, có thể xuống dòng. Hãy tìm các 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] và đếm số lần xuất hiện của các số đó. Dữ liệu vào: Gồm các số nguyên dương không quá 9 chữ số. Không quá 100000 số. Kết quả Ghi ra các số không giảm kèm theo số lần xuất hiện. Các số được liệt kê theo thứ tự sắp xếp số lần xuất hiện giảm dần. Các số có số lần xuất hiện bằng nhau thì số nào xuất hiện trước in ra trước. Ví dụ: Input Output 123 321 23456 123 123 23456 123 5 3523 123 321 4567 8988 78 7654 23456 2 9899 3456 123 678 999 78 3456 78 2 987654321 4546 63543 4656 13432 4567 1 4563 123471 659837 454945 34355 3456 1 9087 9977 98534 3456 23134 678 1 999 1 BÀI 8. SỐ TĂNG GIẢM Một số được gọi là số tăng giảm nếu số đó có các chữ số thỏa mãn hoặc tăng dần, hoặc giảm dần từ trái qua phải. Hãy đếm các số nguyên tố là số tăng giảm với số chữ số cho trước. 6
  7. Dữ liệu vào: Dòng đầu tiên ghi số bộ test. Mỗi bộ test viết trên một dòng số chữ số tương ứng cần kiểm tra [lớn hơn 1 và nhỏ hơn 10] Kết quả: Ghi ra số lượng các số thỏa mãn điều kiện. Input Output 2 20 2 50 4 BÀI 9. PHÂN TÍCH THỪA SỐ NGUYÊN TỐ Hãy phân tích một số nguyên dương thành tích các thừa số nguyên tố. Dữ liệu vào: Dòng đầu tiên ghi số bộ test. Mỗi bộ test viết trên một dòng số nguyên dương n không quá 9 chữ số. Kết quả: Mỗi bộ test viết ra thứ tự bộ test, sau đó lần lượt là các số nguyên tố khác nhau có trong tích, với mỗi số viết thêm số lượng số đó. Xem ví dụ để hiểu rõ hơn về cách viết kết quả. Ví dụ Input Output 3 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ố được coi là đẹp nếu nếu nó có tính chất thuận nghịch và tổng chữ số chia hết cho 10. Bài toán đặt ra là cho trước số chữ số. Hãy đếm xem có bao nhiêu số đẹp với số chữ số như vậy. Dữ liệu vào: Dòng đầu tiên ghi số bộ test. Mỗi bộ test viết trên một dòng số chữ số tương ứng cần kiểm tra [lớn hơn 1 và nhỏ hơn 10]. Kết quả: Mỗi bộ test viết ra số lượng số đẹp tương ứng. Input Output 2 1 2 90 5 BÀI 11. SỐ THUẦN NGUYÊN TỐ Một số được coi là thuần nguyên tố nếu nó là số nguyên tố, tất cả các chữ số là nguyên tố và tổng chữ số của nó cũng là một số nguyên tố. Bài toán đặt ra là đếm xem trong một đoạn giữa hai số nguyên cho trước có bao nhiêu số thuần nguyên tố. Dữ liệu vào: Dòng đầu tiên ghi số bộ test. Mỗi bộ test viết trên một dòng hai số nguyên dương tương ứng, cách nhau một khoảng trống. Các số đều không vượt quá 9 chữ số. Kết quả: Mỗi bộ test viết ra số lượng các số thuần nguyên tố tương ứng. 7
  8. Ví dụ Input Ouput 2 1 23 199 15 2345 6789 BÀI 12. GHÉP HÌNH Cho ba hình chữ nhật. Các bạn được phép xoay hình nhưng không được phép xếp chồng lấn lên nhau, hỏi 3 hình chữ nhật đó có thể ghép thành một hình vuông được hay không Dữ liệu vào: Có ba dòng, mỗi dòng ghi hai số nguyên dương là chiều rộng và chiều cao của hình chữ nhật [các số đều không quá 100]. Kết quả: Ghi ra YES nếu có thể tạo thành hình vuông, NO nếu không thể. Ví dụ: Input Output 8 2 YES 1 6 7 6 1.2. Bài tập về Mảng và Xâu ký tự BÀI 1. MẢNG ĐỐI XỨNG Nhập một dãy số nguyên có n phần tử [n không quá 100, các phần tử trong dãy không quá 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 đúng in ra YES, nếu sai in ra NO. Dữ liệu vào: Dòng đầu ghi số bộ test, mỗi bộ test gồm hai dòng. Dòng đầu là số phần tử của dãy, dòng sau ghi ra dãy đó, mỗi số cách nhau một khoảng trống. Kết quả: Ghi ra YES hoặc NO trên một dòng. Ví dụ Input Ouput 2 YES 4 NO 1 4 4 1 5 1 5 5 5 3 BÀI 2. TÍCH MA TRẬN VỚI CHUYỂN VỊ CỦA NÓ 8
  9. Cho ma trận A chỉ gồm các số nguyên dương cấp N*M. Hãy viết chương trình tính tích của A với ma trận chuyển vị của A. Dữ liệu vào: Dòng đầu tiên ghi số bộ test. Với mỗi bộ test: Dòng đầu tiên ghi hai số n và m là bậc của ma trân a; n dòng tiếp theo, mỗi dòng ghi m số của một dòng trong ma trận A. Kết quả: Với mỗi bộ test ghi ra thứ tự bộ test, sau đó đến ma trận tích tương ứng, mỗi số cách nhau đúng một khoảng trống. Ví dụ Input Output 1 Test 1: 2 2 5 11 1 2 11 25 3 4 BÀI 3. SỐ TĂNG GIẢM Một số được gọi là số tăng giảm nếu số đó có các chữ số thỏa mãn hoặc không giảm, hoặc không tăng từ trái qua phải. Hãy kiểm tra xem một số có phải số tăng giảm hay không. Dữ liệu vào: Dòng đầu tiên ghi số bộ test. Mỗi bộ test viết trên một dòng một số nguyên dương cần kiểm tra, không quá 500 chữ số. Kết quả: Mỗi bộ test viết ra chữ YES nếu đó đúng là số tăng giảm, chữ NO nếu ngược lại. Input Output 3 YES 23455667777777777778888888888899999999 YES 987777777777777777777776554422222221111111111000 NO 43435312432543657657658769898097876465465687987 BÀI 4. CHÈN MẢNG Nhập 2 mảng [a, N] và [b, M] và số nguyên p [0≤p
  10. 2 9 11 BÀI 5. SỐ LA MÃ Bảng chữ số La Mã bao gồm các chữ cái với ý nghĩa I=1; V=5; X=10; L=50; C=100;D=500; M=1000. Một số quy tắc viết các số La Mã như sau:  Tính từ trái sang phải giá trị của các chữ số và nhóm chữ số giảm dần.  I chỉ có thể đứng trước V hoặc X, X chỉ có thể đứng trước L hoặc C, C chỉ có thể đứng trước D hoặc M.  Các chữ cái I, X, C, M, không được lặp lại quá ba lần liên tiếp; các chữ cái V, L, D không được lặp lại quá một lần liên tiếp. Bài toán đặt ra là cho một xâu ký tự mô tả đúng một số La Mã. Hãy tính giá trị thập phân của số đó Input: Dòng đầu ghi số bộ test. Mỗi bộ test ghi trên một dòng dãy ký tự số La Mã. Độ dài không quá 10 ký tự. Output: Với mỗi bộ test ghi ra kết quả tương ứng Ví dụ: Input Output 3 19 XIX 600 DC 400 CD BÀI 6. VÒNG TRÒN Tí viết bảng chữ cái 2 lần lên trên một vòng tròn, mỗi kí tự xuất hiện đúng 2 lần. Sau đó nối lần lượt các kí tự giống nhau lại. Tổng cộng có 26 đoạn thẳng. Hình vẽ quá chằng chịt, Tí muốn đố các bạn xem có tất cả bao nhiêu giao điểm? Một giao điểm được tính khi hai đường thẳng của một cặp kí tự cắt nhau. Input Gồm một xâu có đúng 52 kí tự in hoa. Mỗi kí tự xuất hiện đúng 2 lần. Output In ra đáp án tìm được. Ví dụ: Input Output ABCCABDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ 1 10
  11. Giải thích test: Chỉ có duy nhất cặp kí tự ‘A’, ‘B’ thỏa mãn. BÀI 7. TÍNH TỔNG CÁC CHỮ SỐ Cho xâu ký tự S bao gồm các ký tự ‘A’,..,’Z’ và các chữ số ‘0’,...,’9’. Nhiệm vụ của bạn in các ký tự từ ’A’,.., ‘Z’ trong S theo thứ tự từ điển và nối với tổng các chữ số trong S ở cuối cùng. Ví dụ S =”ACCBA10D2EW30” ta nhận được kết quả: “AABCCDEW6”. Input:  Dòng đầu tiên đưa vào số lượng bộ test T.  Những dòng kế tiếp đưa vào T bộ test. Mỗi bộ test là một xâu ký tự S.  T, S thỏa mãn ràng buộc: 1≤ T ≤100; 1≤ Length[S]≤105. Output:  Đưa ra kết quả mỗi test theo từng dòng. Ví dụ: Input: Output: 2 ABCEW5 AC2BEW3 AABCCDEW6 ACCBA10D2EW30 BÀI 8. SỐ ĐẸP Một số được coi là đẹp nếu đó là số thuận nghịch và chỉ toàn các chữ số chẵn. Viết chương trình đọc vào các số nguyên dương có không quá 500 chữ số và kiếm tra xem số đó có đẹp hay không. Dữ liệu vào: Dòng đầu tiên ghi số bộ test. Mỗi bộ test viết trên một dòng số nguyên dương n không quá 500 chữ số. Kết quả: Mỗi bộ test viết ra trên một dòng chữ YES nếu đó là số đẹp, chữ NO nếu ngược lại Ví dụ Input Output 4 NO 123456787654321 YES 86442824468 YES 8006000444422220000222244440006008 NO 235365789787654324567856578654356786556 BÀI 9. CHUẨN HÓA XÂU HỌ TÊN Một xâu họ tên được coi là viết chuẩn nếu chữ cái đầu tiên mỗi từ được viết hoa, các chữ cái khác viết thường. Các từ cách nhau đúng một dấu cách và không có khoảng trống thừa ở 11
  12. đầu và cuối xâu. Hãy viết chương trình đưa các xâu họ tên về dạng chuẩn. Dữ liệu vào : Dòng 1 ghi số bộ test. Mỗi bộ test ghi trên một dòng xâu ký tự họ tên, không quá 100 ký tự. Kết quả : Với mỗi bộ test ghi ra xâu ký tự họ tên đã chuẩn hóa. Ví dụ: Input Output 3 Nguyen Van Nam nGuYEN vAN naM Tran Trung Hieu tRan TRUNG hiEU Vo Le Hoa Binh vO le hOA bINh BÀI 10 ĐỊA CHỈ EMAIL Địa chỉ email của các cán bộ, giảng viên PTIT được tạo ra bằng cách viết đầy đủ tên và ghép với các chữ cái đầu của họ và tên đệm. Nếu có nhiều người cùng email thì từ người thứ 2 sẽ thêm số thứ tự vào email đó. Cho trước các xâu họ tên [có thể không chuẩn]. Hãy tạo ra các địa email tương ứng. Dữ liệu vào:  Dòng 1 ghi số N là xâu họ tên trong danh sách  N dòng tiếp theo ghi lần lượt các xâu họ tên [không quá 50 ký tự] Kết quả: Ghi ra các email được tạo ra. Ví dụ: Input Output 4 vinhnq@ptit.edu.vn nGUYEn quaNG vInH huongttt@ptit.edu.vn tRan thi THU huOnG vinhnq2@ptit.edu.vn nGO quoC VINH anhlt@ptit.edu.vn lE tuAn aNH BÀI 11. RÚT GỌN XÂU KÝ TỰ Cho một xâu S. Mỗi bước, bạn được phép xóa đi 2 kí tự liền nhau mà giống nhau. Chẳng hạn xâu “aabcc” có thể trở thành “bcc” hoặc “aab” sau 1 lần xóa. Hỏi xâu cuối cùng thu được là gì? Nếu xâu rỗng, in ra “Empty String”. Input: Một xâu S chỉ gồm các chữ cái thường, có độ dài không vượt quá 100. Output: In ra đáp án tìm được. Ví dụ: 12
  13. Test 1 Test 2 Input: Input: aaabccddd abba Output: Output: abd Empty String 1.3 Bài tập cơ bản áp dụng Java Collection BÀI 1. ĐẾM CÁC SỐ NGUYÊN TỐ TRONG DÃY Cho dãy số A có n phần tử chỉ bao gồm các số nguyên dương [không quá 105]. Hãy xác định các số nguyên tố trong dãy và đếm xem mỗi số xuất hiện bao nhiêu lần. Dữ liệu vào: Dòng đầu tiên ghi số bộ test. Với mỗi bộ test: dòng đầu ghi số n [không quá 10]; dòng tiếp theo ghi n số của dãy. Kết quả: Với mỗi bộ test ghi ra thứ tự bộ test, sau đó lần lượt là các số nguyên tố trong dãy theo thứ tự từ nhỏ đến lớn và số lần xuất hiện của nó. Ví dụ: Input Output 1 Test 1: 10 2 xuat hien 3 lan 1 7 2 8 3 3 2 1 3 2 3 xuat hien 3 lan 7 xuat hien 1 lan BÀI 2. TRỘN HAI DÃY VÀ SẮP XẾP Cho hai dãy số nguyên dương A và B không quá 100 phần tử, các giá trị trong dãy không quá 30000 và số phần tử của hai dãy bằng nhau. Hãy trộn hai dãy với nhau sao cho dãy A được đưa vào các vị trí có chỉ số chẵn, dãy B được đưa vào các vị trí có chỉ số lẻ. Đồng thời, dãy A được sắp xếp tăng dần, còn dãy B được sắp xếp giảm dần. [Chú ý: chỉ số tính từ 0] Dữ liệu vào: Dòng 1 ghi số bộ test. Với mỗi bộ test: dòng đầu tiên ghi số n. Dòng tiếp theo ghi n số nguyên dương của dãy A. Dòng tiếp theo ghi n số nguyên dương của dãy B Kết quả: Với mỗi bộ test, đưa ra thứ tự bộ test và dãy kết quả. Ví dụ: Input Output 2 Test 1: 5 1 3 1 3 2 2 2 1 3 1 1 2 3 1 2 Test 2: 3 1 2 3 1 1 8 2 6 4 5 7 2 4 13
  14. 4 2 7 1 5 6 2 8 BÀI 3. ĐẾM SỐ LẦN XUẤT HIỆN Cho dãy số A có n phần tử chỉ bao gồm các số nguyên dương [không quá 105]. Hãy đếm xem mỗi số xuất hiện bao nhiêu lần. Dữ liệu vào: Dòng đầu tiên ghi số bộ test. Với mỗi bộ test: dòng đầu ghi số n [không quá 10]; dòng tiếp theo ghi n số của dãy. Kết quả: Với mỗi bộ test ghi ra thứ tự bộ test, sau đó lần lượt là các số nguyên tố trong dãy theo thứ tự xuất hiện trong dãy và số lần xuất hiện của nó. Input Output 1 Test 1: 10 1 xuat hien 2 lan 1 7 2 8 3 3 2 1 3 2 7 xuat hien 1 lan 2 xuat hien 3 lan 8 xuất hiện 1 lần 3 xuất hiện 3 lần BÀI 4. SẮP XẾP THEO SỐ LẦN XUẤT HIỆN Cho dãy số A[] gồm có N phần tử. Nhiệm vụ của bạn là hãy sắp xếp dãy số này theo tần suất xuất hiện của chúng. Số nào có số lần xuất hiện lớn hơn in ra trước. Nếu có 2 số có số lần xuất hiện bằng nhau, số nào xuất hiện trong dãy A[] trước sẽ được in ra trước. Input: Dòng đầu tiên là số lượng bộ test T [T ≤ 10]. Mỗi test gồm số nguyên N [1≤ N ≤ 100 000], số lượng phần tử trong dãy số ban đầu. Dòng tiếp theo gồm N số nguyên A[i] [-109 ≤ A[i] ≤ 109]. Output: Với mỗi test, in ra trên một dòng là dãy số thu được sau khi thực hiện sắp xếp. Ví dụ: Input Output 14
  15. 2 8 8 8 2 2 5 5 6 8 8 8 8 2 2 5 5 6 -1 9999999 2 5 2 8 5 6 8 8 10 2 5 2 6 -1 9999999 5 8 8 8 BÀI 5. SỐ ĐẦU TIÊN BỊ LẶP Cho dãy số A[] gồm có N phần tử. Nhiệm vụ của bạn là hãy tìm số xuất hiện nhiều hơn 1 lần trong dãy số và số thứ tự là nhỏ nhất. Input: Dòng đầu tiên là số lượng bộ test T [T ≤ 10]. Mỗi test gồm số nguyên N [1≤ N ≤ 100 000], số lượng phần tử trong dãy số ban đầu. Dòng tiếp theo gồm N số nguyên A[i] [0 ≤ A[i] ≤ 109]. Output: Với mỗi test in ra đáp án của bài toán trên một dòng. Nếu không tìm được đáp án, in ra “NO”. Ví dụ: Input Output 2 5 7 NO 10 5 3 4 3 5 6 4 1 2 3 4 Giải thích test 1: Cả 5 và 3 đều xuất hiện 2 lần, nhưng số 5 có số thứ tự nhỏ hơn. 15
  16. CHƯƠNG 2. LÝ THUYẾT TỔ HỢP 2.1. Bài tập về Bài toán đếm BÀI 1. TỔ HỢP C[n, k] Cho 2 số nguyên n, k. Bạn hãy tính C[n, k] modulo 109+7. Input:  Dòng đầu tiên là số lượng bộ test T [T ≤ 20].  Mỗi test gồm 2 số nguyên n, k [1 ≤ k ≤ n ≤ 1000]. Output:  Với mỗi test, in ra đáp án trên một dòng. Ví dụ: Input Output 2 10 5 2 120 10 3 BÀI 2. BẬC THANG Một chiếc cầu thang có N bậc. Mỗi bước, bạn được phép bước lên trên tối đa K bước. Hỏi có tất cả bao nhiêu cách bước để đi hết cầu thang? [Tổng số bước đúng bằng N]. Input:  Dòng đầu tiên là số lượng bộ test T [T ≤ 100].  Mỗi test gồm hai số nguyên dương N và K[1 ≤ N ≤ 100000, 1 ≤ K ≤ 100]. Output:  Với mỗi test, in ra đáp án tìm được trên một dòng theo modulo 109+7. Ví dụ: Input Output 2 2 2 2 5 4 2 Giải thích test 1: Có 2 cách đó là [1, 1] và [2]. Giải thích test 2: 5 cách đó là: [1, 1, 1, 1], [1, 1, 2], [1, 2, 1], [2, 1, 1], [2, 2]. BÀI 3. CATALAN NUMBER Catalan Number là dãy số thỏa mãn biểu thức: 0 𝑛ế𝑢 𝑛 = 0 𝑛−1 𝐶𝑛 = { ∑ 𝐶𝑖 𝐶𝑛−𝑖−1 𝑛ế𝑢 𝑛 > 0 𝑖=0 16
  17. Dưới đây là một số số Catalan với n=0, 1,2,.. : 1, 1, 2, 5, 14, 42, 132, 429,… Cho số tự nhiên N. Nhiệm vụ của bạn là đưa ra số Catalan thứ N. Input:  Dòng đầu tiên đưa vào số lượng bộ test T.  Những dòng kế tiếp đưa vào các bộ test. Mỗi bộ test là một số nguyên n.  T, n thỏa mãn ràng buộc: 1 ≤ T ≤ 100; 1 ≤ n ≤ 100. Output:  Đưa ra kết quả mỗi test theo từng dòng. Ví dụ: Input Output 3 42 5 14 4 16796 10 BÀI 4. TÍNH P[N,K] P[n, k] là số phép biểu diễn các tập con có thứ tự gồm k phần tử của tập gồm n phần tử. Số P[n, k] được định nghĩa theo công thức sau: 0 𝑛ế𝑢 𝑘 > 𝑛 𝑃[𝑛, 𝑘] = { 𝑛! = 𝑛. [𝑛 − 1] … [𝑛 − 𝑘 + 1] 𝑛ế𝑢 𝑘 < 𝑛 [𝑛 − 𝑘]! Cho số hai số n, k. Hãy tìm P[n,k] theo modulo 109+7. Input:  Dòng đầu tiên đưa vào số lượng bộ test T.  Những dòng kế tiếp đưa vào các bộ test. Mỗi bộ test là một cặp số n, k được viết trên một dòng.  T, n, k thỏa mãn ràng buộc: 1 ≤ T ≤ 100; 1 ≤ n,k ≤ 1000. Output:  Đưa ra kết quả mỗi test theo từng dòng. Ví dụ: Input Output 2 20 5 2 12 4 2 BÀI 5. TỔNG CÁC XÂU CON Cho số nguyên dương N được biểu diễn như một xâu ký tự số. Nhiệm vụ của bạn là tìm tổng của tất cả các số tạo bởi các xâu con của N. Ví dụ N=”1234” ta có kết quả là 1670 = 1 + 2 + 3 + 4 + 12 + 23 + 34 + 123 + 234 + 1234. Input: 17
  18.  Dòng đầu tiên đưa vào số lượng bộ test T.  Những dòng kế tiếp đưa vào các bộ test. Mỗi bộ test là một số N.  T, N thỏa mãn ràng buộc: 1≤T≤100; 1≤N ≤1012. Output:  Đưa ra kết quả mỗi test theo từng dòng. Ví dụ: Input Output 2 1670 1234 491 421 BÀI 6. TỔNG BẰNG K Cho một mảng A[] gồm N số nguyên và số K. Tính số cách lấy tổng các phần tử của A[] để bằng K. Phép lấy lặp các phần tử hoặc sắp đặt lại các phần tử được chấp thuận. Ví dụ với mảng A[] = {1, 5, 6}, K = 7 ta có 6 cách sau: 7 = 1 + 1 + 1+1 + 1 + 1+1 [lặp số 1 7 lần] 7 = 1 + 1 + 5 [lặp số 1] 7 = 1 + 5 + 1 [lặp và sắp đặt lại số 1] 7=1+6 7=6+1 Input:  Dòng đầu tiên đưa vào số lượng bộ test T.  Những dòng kế tiếp đưa vào các bộ test. Mỗi bộ test gồm hai phần: phần thứ nhất đưa vào N và K; dòng tiếp theo đưa vào N số của mảng A[]; các số được viết cách nhau một vài khoảng trống.  T, N, K, A[i] thỏa mãn ràng buộc: 1≤T≤100; 1≤N≤1000; 1≤A[i]≤100. Output:  Đưa ra kết quả mỗi test theo từng dòng. Khi kết quả quá lớn đưa ra kết quả dưới dạng modulo với 109+7. Ví dụ: Input Output 2 6 3 7 150 1 5 6 4 14 12 3 1 9 BÀI 7. CON ẾCH Một con ếch có thể nhảy 1, 2, 3 bước để có thể lên đến một đỉnh cần đến. Hãy đếm số các cách con ếch có thể nhảy đến đỉnh. 18
  19. Input:  Dòng đầu tiên đưa vào số lượng bộ test T.  Những dòng kế tiếp đưa vào các bộ test. Mỗi bộ test là số n là số bước con ếch có thể lên được đỉnh.  T, n thỏa mãn ràng buộc: 1≤T≤100; 1≤n ≤50. Output:  Đưa ra kết quả mỗi test theo từng dòng. Ví dụ: Input Output 2 1 1 13 5 BÀI 8. GIẢI MÃ Một bản tin M đã mã hóa bí mật thành các con số theo ánh xạ như sau: ‘A’->1, ‘B’->2, .., ‘Z’- >26. Hãy cho biết có bao nhiêu cách khác nhau để giải mã bản tin M. Ví dụ với bản mã M=”123” nó có thể được giải mã thành ABC [1 2 3], LC [12 3], AW[1 23]. Input:  Dòng đầu tiên đưa vào số lượng bộ test T.  Những dòng kế tiếp đưa vào các bộ test. Mỗi bộ test là một xâu ký tự số M.  T, M thỏa mãn ràng buộc: 1≤T≤100; 1≤length[M]≤40. Output:  Đưa ra kết quả mỗi test theo từng dòng. Ví dụ: Input Output 2 3 123 2 2563 BÀI 9. TỔNG BÌNH PHƯƠNG Mọi số nguyên dương N đều có thể phân tích thành tổng các bình phương của các số nhỏ hơn N. Ví dụ số 100 = 102 hoặc 100 = 52 + 52 + 52 + 52. Cho số nguyên dương N. Nhiệm vụ của bạn là tìm số lượng ít nhất các số nhỏ hơn N mà có tổng bình phương bằng N. Input:  Dòng đầu tiên đưa vào số lượng bộ test T.  Những dòng kế tiếp đưa vào các bộ test. Mỗi test là một số tự nhiên N được viết trên 1 dòng.  T, N thỏa mãn ràng buộc: 1≤T≤100; 1≤N≤10000. Output:  Đưa ra kết quả mỗi test theo từng dòng. 19
  20. Ví dụ: Input Output 3 1 100 3 6 1 25 2.2. Bài tập về Bài toán liệt kê BÀI 1. XÂU NHỊ PHÂN KẾ TIẾP Cho xâu nhị phân X[], nhiệm vụ của bạn là hãy đưa ra xâu nhị phân tiếp theo của X[]. Ví dụ X[] =”010101” thì xâu nhị phân tiếp theo của X[] là “010110”. Input:  Dòng đầu tiên đưa vào số lượng test T.  Những dòng kế tiếp đưa vào các bộ test. Mỗi bộ test là một xâu nhi phân X.  T, X[] thỏa mãn ràng buộc: 1≤T≤100; 1≤length[X]≤103. Output:  Đưa ra kết quả mỗi test theo từng dòng. Input Output 2 010110 010101 000000 111111 BÀI 2. TẬP CON KẾ TIẾP Cho hai số N, K và một tập con K phần tử X[] =[X1, X2,.., XK] của 1, 2, .., N. Nhiệm vụ của bạn là hãy đưa ra tập con K phần tử tiếp theo của X[]. Ví dụ N=5, K=3, X[] ={2, 3, 4} thì tập con tiếp theo của X[] là {2, 3, 5}. Input:  Dòng đầu tiên đưa vào số lượng test T.  Những dòng kế tiếp đưa vào các bộ test. Mỗi bộ test gồm hai dòng: dòng thứ nhất là hai số N và K; dòng tiếp theo đưa vào K phần tử của X[] là một tập con K phần tử của 1, 2, .., N.  T, K, N, X[] thỏa mãn ràng buộc: 1≤T≤100; 1≤K≤N≤103. Output:  Đưa ra kết quả mỗi test theo từng dòng. Input Output 20

Chủ Đề