Tất cả bài tập
80 bài trắc nghiệm & tự luận thực tế, có đáp án chi tiết.
Khai báo biến nguyên
Câu lệnh nào dưới đây khai báo một biến số nguyên tên là x và gán giá trị 10?
Kích thước kiểu dữ liệu
Trên đa số hệ thống 64-bit, `sizeof(int)` thường trả về giá trị nào?
Kết quả phép chia nguyên
Giá trị của biểu thức `7 / 2` trong C++ là gì khi cả hai toán hạng là int?
Toán tử modulo
Giá trị của `17 % 5` là?
Toán tử tăng hậu tố
Cho `int a = 5; int b = a++;`. Sau đó giá trị của a và b là?
In Hello World
Viết chương trình C++ in ra dòng chữ "Hello, World!" trên màn hình.
Tính tổng hai số
Viết chương trình nhập vào hai số nguyên a và b, in ra tổng của chúng.
if-else cơ bản
Đoạn code sau in ra gì?
Toán tử ba ngôi
Giá trị của biểu thức `(5 > 3) ? "yes" : "no"` là?
Số chẵn hay lẻ
Viết chương trình nhập một số nguyên và kiểm tra số đó là chẵn hay lẻ.
Giải phương trình bậc 2
Viết chương trình giải phương trình bậc 2: ax² + bx + c = 0 (a ≠ 0).
Số lần lặp for
Vòng lặp `for (int i = 0; i < 5; i++)` chạy bao nhiêu lần?
while vs do-while
Đoạn code này in ra gì?
Tính tổng từ 1 đến N
Nhập số nguyên dương N, tính tổng S = 1 + 2 + ... + N.
Kiểm tra số nguyên tố
Viết chương trình kiểm tra số n có phải là số nguyên tố hay không.
Dãy Fibonacci
In ra n số đầu tiên của dãy Fibonacci: 0, 1, 1, 2, 3, 5, 8, ...
Hàm trả về void
Hàm khai báo `void foo()` có thể chứa câu lệnh nào sau đây?
Truyền tham chiếu
Sau khi gọi `swap(x, y)` với `void swap(int& a, int& b) { int t=a; a=b; b=t; }` và x=3, y=7. Kết quả?
Hàm tính giai thừa (đệ quy)
Viết hàm đệ quy tính n! (n giai thừa).
UCLN hai số (Euclid)
Viết hàm tính ước chung lớn nhất (UCLN/GCD) của hai số nguyên dương a và b.
Chỉ số mảng
Mảng `int a[5];` có các chỉ số hợp lệ là?
Mảng truyền vào hàm
Khi truyền mảng vào hàm `void f(int a[])`, thực chất truyền cái gì?
Tìm max trong mảng
Nhập n và mảng n số nguyên. In ra giá trị lớn nhất.
Đảo ngược mảng
Đảo ngược thứ tự các phần tử của mảng a có n phần tử.
Sắp xếp nổi bọt (Bubble Sort)
Cài đặt thuật toán Bubble Sort cho mảng n số nguyên tăng dần.
Khai báo chuỗi
Khai báo nào dưới đây tạo một chuỗi C++ (std::string) chứa "hello"?
Độ dài chuỗi
Cách nào lấy độ dài chuỗi `string s = "abc"`?
Đếm nguyên âm
Đếm số nguyên âm (a, e, i, o, u, không phân biệt hoa thường) trong chuỗi.
Kiểm tra Palindrome
Kiểm tra một chuỗi có phải là chuỗi đối xứng (palindrome) hay không.
Toán tử dereference
Cho `int x = 5; int* p = &x;`. Giá trị của `*p` là?
Hoán đổi qua con trỏ
Viết hàm `void swap(int* a, int* b)` để hoán đổi giá trị hai biến qua con trỏ.
Constructor
Hàm dựng (constructor) được gọi khi nào?
Đóng gói (Encapsulation)
Từ khoá nào dùng để giới hạn truy cập, chỉ cho phép trong cùng class?
Class Hình chữ nhật
Tạo class `Rectangle` có 2 thuộc tính private `width`, `height`. Viết constructor, hàm `area()` và `perimeter()`.
Kế thừa & đa hình
Tạo class `Animal` có phương thức ảo `speak()`. Tạo class `Dog` kế thừa `Animal` và override `speak()` để in "Gau gau".
Vector size
Sau `vector<int> v = {1,2,3}; v.push_back(4);` thì `v.size()` là?
Sắp xếp vector với STL
Dùng STL để sắp xếp một vector các số nguyên tăng dần và giảm dần.
Độ phức tạp Binary Search
Độ phức tạp thuật toán tìm kiếm nhị phân trên mảng đã sắp xếp n phần tử là?
Tìm kiếm nhị phân
Cài đặt thuật toán tìm kiếm nhị phân trên mảng đã sắp xếp. Trả về chỉ số phần tử cần tìm, hoặc -1 nếu không có.
Đếm số chữ số
Đếm số chữ số của một số nguyên dương n (ví dụ n=12345 → 5).
Tính tiền taxi
Giá mở cửa 12.000đ (1km đầu). Từ km thứ 2 đến km 30: 15.000đ/km. Từ km 31 trở đi: 12.000đ/km. Viết chương trình nhập số km, in tổng tiền.
Kiểu dữ liệu cho số tiền lớn
Cần lưu tổng doanh thu năm khoảng 15 tỷ VNĐ. Nên dùng kiểu nào?
Máy tính chỉ số BMI
Nhập chiều cao (cm) và cân nặng (kg), tính BMI = kg / (m*m). In ra 2 chữ số thập phân.
Phép chia nguyên
Kết quả `int a = 7; double b = a / 2;` là bao nhiêu?
Đổi giây sang h:m:s
Nhập tổng số giây S (ví dụ 3725), in ra dạng H:M:S (1:2:5).
Tính thuế thu nhập cá nhân bậc thang
Thu nhập chịu thuế X (triệu/tháng). Bậc: ≤5tr: 5%, 5-10: 10%, 10-18: 15%, >18: 20% (đơn giản hoá). Tính thuế.
Fall-through trong switch
Trong switch, nếu quên `break` sau một case thì điều gì xảy ra?
Kiểm tra tam giác hợp lệ
Nhập 3 cạnh a, b, c. Kiểm tra có tạo thành tam giác không, và nếu có thì thuộc loại: đều, cân, vuông, thường.
Xếp loại học lực cuối kỳ
Nhập điểm 3 môn Toán, Văn, Anh. Tính TB và xếp loại: Giỏi (>=8 và không môn <6.5), Khá (>=6.5 và không <5), TB (>=5 và không <3.5), Yếu.
Tính lãi kép ngân hàng
Gửi P đồng, lãi r%/năm, kỳ hạn n năm. In số dư mỗi năm và tổng cuối kỳ.
Vòng lặp vô hạn
Đoạn `for (int i = 0; i < 10; ) cout << i;` có vấn đề gì?
Đếm số nguyên tố ≤ N
Nhập N, in tất cả số nguyên tố từ 2 đến N và tổng số lượng.
In hình tam giác cân bằng dấu *
Nhập N, in tam giác cân N dòng (dòng i có i dấu * căn giữa).
Đảo ngược số
Nhập số nguyên N, in số đảo ngược (ví dụ 12345 → 54321).
Hàm tính khoảng cách 2 điểm
Viết hàm double distance(double x1,y1,x2,y2) dùng công thức Euclid.
Truyền tham chiếu
Với `void swap(int& a, int& b)`, sau khi gọi swap(x, y) thì?
Đệ quy tính giai thừa
Viết hàm đệ quy tính n! (0! = 1).
Hàm kiểm tra ngày hợp lệ
Viết bool isValidDate(int d, int m, int y). Kiểm tra tháng có 30/31 ngày, tháng 2 có xét năm nhuận.
Điểm cao nhất lớp
Nhập N điểm, in điểm cao nhất và vị trí của học sinh đó.
Vượt biên mảng
`int a[5]; a[10] = 3;` — điều gì xảy ra?
Xoá phần tử trùng lặp
Cho vector int, xoá các phần tử trùng lặp, giữ thứ tự xuất hiện đầu tiên.
Xoay ma trận 90°
Cho ma trận vuông NxN, xoay 90° theo chiều kim đồng hồ (in-place hoặc dùng ma trận phụ).
Đếm nguyên âm
Nhập chuỗi, đếm số nguyên âm (a, e, i, o, u — cả hoa và thường).
Kiểm tra palindrome
Nhập chuỗi, kiểm tra có phải palindrome không (đọc xuôi ngược như nhau). Bỏ qua khoảng trắng và hoa/thường.
getline sau cin >>
`int n; cin >> n; string s; getline(cin, s);` — s nhận được gì khi nhập `5⏎Nguyen Van A⏎`?
Tách chuỗi CSV
Nhập chuỗi dạng "Minh,20,Hanoi,IT". In từng trường trên một dòng.
Con trỏ null
Cách nào đúng để khai báo con trỏ int không trỏ đến đâu?
Rò rỉ bộ nhớ (memory leak)
Đoạn code sau bị rò rỉ ở đâu? Sửa lại. `void f(){ int* p = new int(5); if (p == nullptr) return; }`
Đảo ngược danh sách liên kết
Cho danh sách liên kết đơn, viết hàm đảo ngược thứ tự (không cấp phát nút mới).
Class Quản lý sinh viên
Tạo class SinhVien có: MSSV, tên, GPA. Constructor, getter/setter, method inThongTin(). Tạo mảng 3 sinh viên và in ra người có GPA cao nhất.
Hệ thống nhân viên với kế thừa
Class NhanVien (lương cứng). Kế thừa: NVBanHang (lương + %doanh_số), NVSanXuat (lương + phụ_cấp*giờ_làm). Method ảo tinhLuong(). In tổng lương công ty.
Constructor mặc định
Khi nào compiler tự sinh constructor mặc định?
Danh bạ điện thoại
Dùng map<string, string> lưu (Tên → SĐT). Cho phép thêm, tra cứu, xoá, in danh sách theo thứ tự tên.
Sắp xếp học sinh theo GPA giảm dần
Cho vector<pair<string,double>> (tên, GPA). Sắp xếp GPA giảm dần; nếu bằng thì tên tăng dần.
Thứ tự BFS trên đồ thị
Cho đồ thị vô hướng (danh sách kề). In thứ tự duyệt BFS từ đỉnh 0.
Ước chung lớn nhất (GCD)
Viết hàm gcd(a, b) dùng thuật toán Euclid.
Bài toán trả tiền lẻ ít tờ nhất
Cho các mệnh giá {500k, 200k, 100k, 50k, 20k, 10k, 5k, 2k, 1k} và số tiền X. Tính số tờ ít nhất để trả đủ X.
Độ phức tạp bubble sort
Độ phức tạp trường hợp xấu nhất của Bubble Sort?
Dãy con tăng dài nhất (LIS)
Cho mảng n số, tìm độ dài dãy con tăng dài nhất (không cần liên tiếp).
Kiểm tra số nguyên tố nhanh
Viết hàm bool isPrime(long long n) chạy nhanh cho n đến 10^12.