Danh sách này sắp từ dễ đến khó. Trừ các bài bắt buộc, chẳng hạn bộ Danh sách liên kết, còn lại các bạn có thể bỏ qua các bài mà bạn thấy quá dễ.
Các bài này rất dễ, chủ yếu để ôn cú pháp, có thể mở link xem qua rồi bỏ qua.
Say "Hello, World!" With C++ Tóm tắt: In ra dòng chữ “Hello, World”.
Input and Output Tóm tắt: Đọc vào 3 số, rồi in ra tổng của chúng.
Basic Data Types Tóm tắt: Đọc vào các số với kiểu dữ liệu khác nhau, rồi in chúng ra lại.
Conditional Statements Tóm tắt: Với mỗi số đọc vào, in ra từ tiếng Anh tương ứng (one, two, …, nine, Greater than 9).
For Loops Đọc vào a và b và in ra các số trong đoạn [a, b] bằng chữ hoặc chẵn lẻ
Functions Tóm tắt: Viết để hoàn thiện hàm trả về giá trị lớn nhất của 4 số. Chỉ viết thân hàm, còn việc nhập xuất, và khai báo hàm đã được làm sẵn.
Arrays Introduction Tóm tắt: Nhập vào mảng các số với dòng đầu là số phần tử, và dòng sau là dãy giá trị. Sau đó in ra các phần tử của mảng theo thứ tự đảo ngược lại so với ban đầu.
Plus Minus Tóm tắt: Nhập vào các số (dòng đầu là số các số, dòng sau là dãy giá trị). In ra tỷ lệ các số các số dương, số các số âm và số các số bằng 0 (mỗi giá trị tỷ lệ trên một dòng).
Pointer thử dùng con trỏ (để sau cũng được)
Variable sized arrays tập dùng cấu trúc dữ liệu vector. Tóm tắt: Dữ liệu đầu vào gồm: n - số các dãy số với độ dài khác nhau; q - số các câu truy vấn (query). Tiếp sau là n dãy số, mỗi dãy bắt đầu bằng số các phần tử của dãy và tiếp theo là giá trị các phần từ trong dãy đó. Cuối cùng là q câu truy vấn gồm hai giá trị (i, j). Với mỗi câu truy vấn, yêu cầu là in ra giá trị của phần tử có chỉ số (index) j tại mảng (dãy số) thứ i. (để sau cũng được)
Strings Tóm tắt: Đọc vào 2 chuỗi. In ra độ dài hai chuỗi, chuỗi kết nối, và 2 chuỗi mới từ 2 chuỗi ban đầu nhưng hoán vị kí tự đầu tiên.
Tóm tắt: Thêm vào khai báo cho Student (sinh viên) với 4 trường: age, first_name, last_name, standard để làm sao chương trình ở hàm main() chạy đúng.
Tóm tắt: Xây dựng lớp (class) Student với các thuộc tính và phương thức cần thiết để giúp cho chương trình ở hàm main() chạy đúng. Đặc tả của lớp Student xem trong mô tả tiếng Anh.
Tóm tắt: Kristen muốn biết có bao nhiều sinh viên có tổng số điểm 5 môn cao hơn tổng điểm của cô. Chương trình ở hàm main() giúp cô đếm số sinh viên đó.
Hãy xây dựng lớp (class) Student với các thuộc tính và phương thức cần thiết để giúp cho chương trình ở hàm main() chạy đúng. Đặc tả của lớp Student xem trong mô tả tiếng Anh.
Chú ý là lớp Student phải có phương thức input() để đọc dữ liệu điểm gồm 5 số từ ngoài vào, cũng như phải có phương thức calculateTotalScore() để tính tổng điểm và trả về.
Tóm tắt: Dữ liệu vào gồm số n, và tiếp theo là n số nguyên. Hãy sắp xếp các số theo thứ tự tăng dần và in ra. (Nên sử dụng hàm sort có sẵn để sắp xếp.)
Tóm tắt: Dữ liệu vào gồm số n ở dòng 1, và tiếp theo là n số nguyên ở dòng 2. Chú ý các số nguyên được tính chỉ số từ 1. Dòng thứ 3 là chỉ số của phần từ cần bị xoá. Dòng thứ 4 gồm 2 số a và b, với yêu cầu là xoá đi phần tử a , a+1, …, b-1 (không xoá phần từ thứ b) của dãy kết quả sau khi đã xoá phần tử ở dòng 3. In ra dãy số còn lại.
Tóm tắt: Dữ liệu vào gồm số n ở dòng 1, và tiếp theo là n số nguyên ở dòng 2. Chú ý các số nguyên được tính chỉ số từ 1 và các số đã được sắp tăng dần.
Dòng thứ 3 là Q - số các test phải làm.
Mỗi test ở dòng tiếp theo gồm 1 giá trị nguyên Y. Yêu cầu với mỗi Y:
Nếu Y có trong dãy số thì in ra
Yes - chỉ số tính từ 1 của số Y trong dãy.
Nếu Y không có trong dãy thì in ra
No - chỉ số của giá trị nhỏ nhất nhưng lớn hơn Y (cận trên) trong dãy
Khi có nhiều giá trị bằng nhau thoả mãn điều kiện, chỉ cần in ra chỉ số nhỏ nhất.
Tóm tắt: Cho Q thao tác (query). Mỗi thao tác thuộc 1 trong 3 loại:
1 x: Thêm x vào tập
2 x: Loại x khỏi tập (Nếu x không có, không làm gì cả)
3 x: Nếu x trong tập, in ra “Yes” còn nếu không in ra “No"
Dữ liệu vào gồm dòng đầu là Q - số lượng thao tác. Tiếp sau là Q dòng, mỗi dòng là một thao tác với loại thao tác và x.
Hãy in ra Yes hay No phù hợp trên một dòng khi gặp thao tác loại 3.
Tóm tắt: Khi xử lý điểm của sinh viên, cần làm một trong 3 loại thao tác:
1 X Y: cộng thêm điểm Y vào trong tổng điểm của sinh viên X
2 X: xoá đi điểm của sinh viên X
3 X: in ra tổng điểm của sinh viên X. (Nếu sinh viên X không có điểm thì in ra 0).
Dữ liệu vào gồm dòng đầu là Q - số lượng thao tác. Tiếp theo là Q dòng, mỗi dòng là một thao tác với loại thao tác và tham số tương ứng.
Hãy in ra kết quả phù hợp trên một dòng khi loại thao tác là 3.
Đừng bảo AI gen code nhé, cố gắng tự làm, nếu khó thì hỏi bạn nhưng rốt cuộc vẫn phải tự viết code.
Find Digits (function, loop) Tóm tắt: Đọc vào T test. Trong mỗi test, đọc vào số N. Hãy đếm số các chữ số d_i của N mà N chia hết cho d_i.
Kangaroo (function, loop) Tóm tắt: Hai con kangaroo, với vị trí xuất phát và tốc độ nhảy, nhảy về cùng hướng. Hỏi chúng có bao giờ gặp nhau không ? và nếu có thì khi nào ?
Staircase (function, loop) Tóm tắt: Đọc vào số n; In ra các dấu “#” theo dạng bậc thang với n hàng.
Drawing Book (function) Tóm tắt: Quyển sách có n trang (với trang đầu tiên đánh số 1, ở bên phải, các trang số chẵn bên trái, trang số lẻ bên phải). Mỗi lần lật được 1 trang. Có thể bắt đầu lật từ trang đầu tiên (số 1) xuống hay ngược lại trừ trang cuối cùng lên. Hỏi nếu cần đọc trang p, cần lật ít nhất bao nhiêu trang ? Bộ test có q test. Chỉ cần cài đặt hàm solve().
Sherlock and Array (function, array) Tóm tắt: Cho mảng có n phần tử (a_0, …, a_n-1). Có hay không chỉ số i để sao cho tổng trái bằng tổng phải (không tính số a_i), tức (a_0 + … + a_i-1) = (a_i+1 + … + a_n-1). Nếu có thì in ra “YES", nếu không thì in ra “NO".
Divisible Sum Pairs (function, array) Tóm tắt: Cho N, K và N số nguyên a_0, …, a_N-1. Hãy đếm số cặp (i, j) sao cho i<j và tổng (a_i+a_j) chia hết cho K.
Equalize the Array (function, array) Tóm tắt: Cho một dãy (mảng) các số nguyên. Mỗi thao tác xoá một phần tử trong dãy. Hỏi số thao tác ít nhất cần thực hiện để được kết quả là tất cả các phần tử còn lại của dãy là bằng nhau ?
Time Conversion (function, string) Tóm tắt: Đọc vào chuỗi thời gian dạng (format) 12 tiếng. Chuyển đổi, rồi in ra thời gian dạng (format) 12 tiếng. Ví dụ 07:05:45PM thành 19:05:45
CamelCase (function, string) Tóm tắt: Cho một chuỗi dạng camel case (như con lạc đà có bướu lên cao xuống thấp). In ra số từ trong chuỗi đó. Ví dụ: với chuỗi “camelCase”, thì in ra 2.
HackerRank in a String! (function, string) Tóm tắt: Có T test. Với mỗi test, đầu vào là một chuỗi; cần in ra xem chuỗi đó có chứa xâu con (subsequence) “hackerrank” trong nó hay không. Chú ý rằng các kí tự ‘h’, ‘a, …, ‘k’ cần có trong chuỗi đầu vào, theo đúng thứ tự trước sau, nhưng không cần phải liền sát nhau.
Caesar Cipher (function, string) Tóm tắt: Đầu vào gồm độ dài chuỗi, chuỗi, và số kí tự dịch chuyển. Hãy mã hóa theo cách của Caesar và in ra chuỗi được mã hóa.
Palindrome Index (function, string) Tóm tắt: Một chuỗi kí tự gọi là "palindrome" nếu nó đối xứng (hay đọc từ trái qua phải giống đọc từ phải qua trái). Ví dụ: aba, a, bbb, aa, baab.
Cho một chuỗi, hãy tìm và ra chỉ số (index) của một kí tự trong chuỗi để sao cho nếu loại bỏ kí tự đó đi thì chuỗi còn lại là "palindrome". Nếu chuỗi ban đầu đã là "palindrome" thì in ra -1. (Chú ý là luôn có giải pháp, tức chuỗi cho ban đầu chỉ cần loại đi tối đa một kí tự thì sẽ đối xứng.)
Between Two Sets (function, array) Tóm tắt: Cho tập A = {a_0, …, a_n} và tập B = {b_0, …, b_m}. Một số x được gọi là ‘ở giữa’ nếu x chia hết cho mọi phần tử a_i của tập A, đồng thời mọi phần tử b_k của tập B chia hết cho x. Với 2 tập A và B, tìm và in ra số các số ‘ở giữa” chúng.
Mystery Number Tóm tắt: cho n, cùng dãy số A (có n phần tử) và dãy số B (có n+1 phần tử). Tìm và in ra phần tử duy nhất có trong B nhưng không có trong A.
Falling Rocks Tóm tắt: Hình dung bỗng nhiên bạn trong 1 thế giới ma trận 2 chiều. Bạn ở dưới đất (hàng 1). Các hòn đá rơi từ trên trời (hàng 2 trở lên) xuống theo chiều dọc (các cột). Tại mỗi vòng (lượt) bạn chỉ có thể đứng yên, hoặc nhảy sang trái 1 ô, hoặc nhảy sang phải 1 ô nếu như các ô đó trống. Và mỗi vòng (lượt), đá từ 1 hàng rơi xuống. Rồi tới lượt sau thì những hòn đá của hàng đang trên mặt đất sẽ biến mất (rơi tiếp chui vào lòng đất).
Cho biết vị trí của bạn ở hàng 1, cũng như các hòn đá ở các hàng trên trong một ma trận 2 chiều. Hỏi có hay không cách nhảy/dịch chuyển, để cuối cùng bạn không bị hòn đá nào rơi vào người ?
Tóm tắt: Đếm số các cách để sao cho một số nguyên X có thể biểu diễn được bằng tổng các số khác nhau đôi một, trong đó mỗi số có dạng a^N (a mũ N) với X và N là các giá trị cho trước. Ví dụ với X=13 và N=2, kết quả trả về là 1 do chỉ có một cách duy nhất là 13 = 3^2 + 2^2.
Bài 4
Tóm tắt: Cho ô chữ 10x10, trong đó các ô hoặc là ‘+’ hoặc ‘-’. Cho danh sách các từ. Hãy tìm cách điền các từ vào để giải được ô chữ. Các kí tự chỉ được điền vào các ô ‘-’ trong ô chữ ban đầu.
Đừng bảo AI gen code nhé. Nhớ là bạn cần thấy các bài Medium đơn giản rồi hãy bắt đầu dùng AI gen code.
Danh sách liên kết (cần làm hết)
Bài 1
Print the Elements of a Linked List
Tóm tắt: Viết hàm in ra tất các phần tử của một danh sách liên kết (linked-list) với đầu vào là con trỏ (pointer) đầu (head) của danh sách này. Cấu trúc struct của mỗi nút (node) trong danh sách liên kết đã được khai báo sẵn.
Yêu cầu: Làm bằng 2 cách (1) sử dụng vòng lặp và (2) sử dụng đệ qui.
Bài 2
Insert a Node at the Tail of a Linked List
Tóm tắt: Viết hàm chèn (insert) một phần tử vào đuôi (tail) một danh sách liên kết (linked-list) với đầu vào là con trỏ (pointer) đầu (head) của danh sách này và giá trị cần chèn. Cấu trúc struct của mỗi nút (node) trong danh sách liên kết đã được khai báo sẵn.
Yêu cầu: Làm bằng 2 cách (1) sử dụng vòng lặp và (2) sử dụng đệ qui.
Bài 3
Insert a node at the head of a linked list
Tóm tắt: Viết hàm chèn (insert) một phần tử vào đầu (head) một danh sách liên kết (linked-list) với đầu vào là con trỏ (pointer) đầu (head) của danh sách này và giá trị cần chèn. Cấu trúc struct của mỗi nút (node) trong danh sách liên kết đã được khai báo sẵn.
Day 3: Intro to Conditional Statements
Day 16: Exceptions - String to Integer
Tóm tắt: Xây dựng lớp (class) Box để làm sao chương trình ở hàm main() chạy đúng. Chú ý với các phép toán đè (operator overload), sử dụng phần code khai báo gợi ý sẵn để làm.