Tuyển sinh 🎓 Mình nhận đào tạo lập trình giải thuật thi đấu: thi vào lớp 10 chuyên tin · thi học sinh giỏi tin học cấp tỉnh/thành · thi vào đội tuyển quốc gia · Olympic tin học sinh viên / ICPC · phỏng vấn thuật toán. Bấm vào đây để xem thông tin khóa học → Xem khóa học
Thi thử miễn phí
🏆 Thi thử HSG Tin học tuần này trên ClueOJ
Mở công khai cho mọi người · đề do thầy Nguyễn Việt Nam Sơn biên soạn
Lịch thi, đề cũ & lời giải →

Bài 3: Câu lệnh điều kiện rẽ nhánh if, else, else if, switch trong C++ và Python

Bài 3 – Câu lệnh rẽ nhánh if, else, else if, switch
Series: Nhập môn lập trình thuật toán Độ khó: Dễ Bài 3 / Kiến thức nền tảng Rẽ nhánh
// Nhập môn lập trình · Bài 3
Câu lệnh điều kiện rẽ nhánh: if, else, else if, switch
Dạy máy tính biết lựa chọn: "nếu điều kiện đúng thì làm việc này, còn không thì làm việc kia". Đây là viên gạch thứ hai của mọi thuật toán, sau nhập xuất.

Lời mở đầu

Các chương trình ở bài 2 chạy thẳng một mạch từ trên xuống dưới, lệnh nào cũng được thực hiện. Nhưng ngoài đời mình luôn phải lựa chọn: nếu trời mưa thì mang áo mưa, còn không thì thôi. Trong lập trình, việc lựa chọn đó gọi là rẽ nhánh, và câu lệnh dùng để rẽ nhánh là if. Bài này mình đi từ biểu thức điều kiện, tới if, if – else, chuỗi else if, rồi switch, kèm những lỗi sai mà năm nào học viên của mình cũng mắc.

Trong bài này bạn sẽ học: biểu thức điều kiện, câu lệnh if và if – else, nhiều nhánh với else if, kết hợp điều kiện bằng && / ||, switch – case, toán tử 3 ngôi và các lỗi hay gặp. Có khung chạy tay từng bước và bài tập kèm gợi ý.

Lộ trình bài viết, bấm vào từng phần để nhảy tới:

Phần 1Biểu thức điều kiện

Điều kiện là một biểu thức cho kết quả đúng (true) hoặc sai (false), ví dụ $n \gt 0$, $a = b$… Để viết điều kiện ta dùng các toán tử so sánh và toán tử logic:

Ý nghĩaToán họcC++PythonVí dụ (a = 5, b = 3)
Bằng$=$a == ba == bfalse
Khác$\ne$a != ba != btrue
Lớn hơn / nhỏ hơn$\gt$ / $\lt$a > b / a < bgiống C++true / false
Lớn hơn hoặc bằng / nhỏ hơn hoặc bằng$\ge$ / $\le$a >= b / a <= bgiống C++true / false
VÀ: cả 2 cùng đúng$\land$&&anda > 0 && b > 4 → false
HOẶC: ít nhất 1 cái đúng$\lor$||ora > 0 || b > 4 → true
PHỦ ĐỊNH: đảo đúng ↔ sai$\lnot$!not!(a > b) → false
Dấu = và dấu ==
Trong C++ và Python, = là phép gán (bỏ giá trị vào biến), còn == mới là so sánh bằng. Viết if(n = 5) trong C++ không báo lỗi mà gán luôn n thành 5 và điều kiện luôn đúng, rất khó phát hiện. Python thì báo lỗi cú pháp luôn, đỡ hơn.
Viết điều kiện "nằm trong khoảng"
Toán học viết $1 \le x \le 10$, nhưng C++ phải tách thành x >= 1 && x <= 10. Nếu viết 1 <= x <= 10 thì C++ hiểu sai (nó so sánh 1 <= x ra 0 hoặc 1, rồi mới lấy kết quả đó so với 10 nên luôn đúng). Python thì cho phép viết 1 <= x <= 10 đúng như toán học.

Phần 2Câu lệnh if và if – else

Dạng thiếu: if
if(điều_kiện){
    // chỉ chạy khi điều kiện ĐÚNG
}
Điều kiện sai thì bỏ qua cả khối lệnh, chạy tiếp lệnh phía sau.
Dạng đủ: if – else
if(điều_kiện){
    // chạy khi điều kiện ĐÚNG
}
else{
    // chạy khi điều kiện SAI
}
Luôn chạy đúng 1 trong 2 khối lệnh.
Đọc n n % 2 == 0 ? ĐÚNG SAI In "CHAN" In "LE" Kết thúc

Sơ đồ khối của chương trình kiểm tra chẵn lẻ: hình thoi là điều kiện, chỉ đi theo 1 trong 2 nhánh.

Ví dụ kinh điển: số $n$ chẵn khi chia hết cho 2, tức là $n \% 2 = 0$. Các bạn thử đổi dữ liệu vào để xem chương trình đi nhánh nào:

Code C++ và Python
#include <iostream>
using namespace std;

int main(){
    int n;
    cin >> n;
    if(n % 2 == 0){
        cout << "CHAN";
    }
    else{
        cout << "LE";
    }
    return 0;
}
n = int(input())
if n % 2 == 0:
    print("CHAN")
else:
    print("LE")
C++▶ Chạy tay từng dòng codeKiểm tra n chẵn hay lẻ: if – else rẽ theo 1 trong 2 nhánh tuỳ điều kiện n % 2 == 0 đúng hay sai.
Dữ liệu mẫu:
1#include <iostream>
2using namespace std;
3
4int main(){
5 int n;
6 cin >> n;
7 if(n % 2 == 0){
8 cout << "CHAN";
9 }
10 else{
11 cout << "LE";
12 }
13 return 0;
14}

Để ý cú pháp Python: không có ngoặc nhọn, sau điều kiện là dấu hai chấm :, các lệnh bên trong thụt lề vào 4 dấu cách. Thụt lề sai là Python báo lỗi hoặc chạy sai luôn.

Dạng thiếu (if không có else) rất hay dùng để cập nhật một giá trị khi gặp trường hợp tốt hơn. Đây chính là ý tưởng tìm số lớn nhất ở bài 1, áp dụng cho 3 số:

Code C++ và Python
#include <iostream>
using namespace std;

int main(){
    int a, b, c;
    cin >> a >> b >> c;
    int mx = a;
    if(b > mx){
        mx = b;
    }
    if(c > mx){
        mx = c;
    }
    cout << mx;
    return 0;
}
a, b, c = map(int, input().split())
mx = a
if b > mx:
    mx = b
if c > mx:
    mx = c
print(mx)
C++▶ Chạy tay từng dòng codeTìm số lớn nhất trong 3 số bằng các câu lệnh if nối tiếp (không có else).
Dữ liệu mẫu:
1#include <iostream>
2using namespace std;
3
4int main(){
5 int a, b, c;
6 cin >> a >> b >> c;
7 int mx = a;
8 if(b > mx){
9 mx = b;
10 }
11 if(c > mx){
12 mx = c;
13 }
14 cout << mx;
15 return 0;
16}
Khi khối lệnh chỉ có 1 lệnh
Nếu bên trong if chỉ có đúng 1 lệnh thì C++ cho phép bỏ cặp ngoặc { }: if(b > mx) mx = b;. Nhưng từ 2 lệnh trở lên thì bắt buộc phải có ngoặc. Người mới học nên cứ viết ngoặc cho chắc.

Mô phỏng trực quan. Đọc code if – else rồi mà vẫn khó hình dung chương trình “rẽ” thế nào? Em bấm Tiếp để đi theo sơ đồ khối của bài chẵn lẻ, rồi đổi n (thử cả số âm) xem đường đi đổi ra sao:

MÔ PHỎNGĐi theo sơ đồ khối if – else: n chẵn hay lẻ?Nhập n rồi bấm Tiếp / Tự chạy. Đường màu cam là đường chương trình thực sự đi qua.
ô đang chạyô đã đi quachưa đi / bị bỏ qua

Phần 3Nhiều nhánh với else if và kết hợp điều kiện

Khi có nhiều hơn 2 trường hợp, ta nối các điều kiện bằng else if (Python viết là elif). Máy xét lần lượt từ trên xuống: gặp điều kiện đúng đầu tiên thì chạy nhánh đó rồi bỏ qua toàn bộ phần còn lại; nếu không điều kiện nào đúng thì chạy nhánh else cuối cùng (nếu có).

Ví dụ xếp loại học lực: từ 8 điểm là Giỏi, từ 6.5 là Khá, từ 5 là Trung bình, dưới 5 là Yếu:

Code C++ và Python
#include <iostream>
using namespace std;

int main(){
    double d;
    cin >> d;
    if(d >= 8){
        cout << "Gioi";
    }
    else if(d >= 6.5){
        cout << "Kha";
    }
    else if(d >= 5){
        cout << "Trung binh";
    }
    else{
        cout << "Yeu";
    }
    return 0;
}
d = float(input())
if d >= 8:
    print("Gioi")
elif d >= 6.5:
    print("Kha")
elif d >= 5:
    print("Trung binh")
else:
    print("Yeu")
C++▶ Chạy tay từng dòng codeXếp loại học lực theo điểm trung bình bằng chuỗi if – else if – else: xét lần lượt từ trên xuống, gặp điều kiện đúng đầu tiên thì dừng.
Dữ liệu mẫu:
1#include <iostream>
2using namespace std;
3
4int main(){
5 double d;
6 cin >> d;
7 if(d >= 8){
8 cout << "Gioi";
9 }
10 else if(d >= 6.5){
11 cout << "Kha";
12 }
13 else if(d >= 5){
14 cout << "Trung binh";
15 }
16 else{
17 cout << "Yeu";
18 }
19 return 0;
20}
Thứ tự điều kiện rất quan trọng
Nhánh else if(d >= 6.5) chỉ được xét khi điều kiện phía trên d >= 8 đã sai, nên ở đó mình ngầm hiểu $d \lt 8$ rồi, không cần viết d >= 6.5 && d < 8. Nhưng nếu đảo thứ tự, đặt d >= 5 lên đầu, thì bạn 9 điểm cũng bị xếp "Trung bình" vì điều kiện đầu tiên đã đúng!

Điều kiện phức tạp hơn thì kết hợp bằng &&, ||. Ví dụ năm nhuận theo lịch Gregory: năm chia hết cho 4 nhưng không chia hết cho 100, hoặc chia hết cho 400. Vậy 2024 và 2000 là năm nhuận, còn 1900 và 2026 thì không:

Code C++ và Python
#include <iostream>
using namespace std;

int main(){
    int y;
    cin >> y;
    bool c1 = (y % 4 == 0 && y % 100 != 0);
    bool c2 = (y % 400 == 0);
    if(c1 || c2){
        cout << "NHUAN";
    }
    else{
        cout << "KHONG NHUAN";
    }
    return 0;
}
y = int(input())
c1 = (y % 4 == 0 and y % 100 != 0)
c2 = (y % 400 == 0)
if c1 or c2:
    print("NHUAN")
else:
    print("KHONG NHUAN")
C++▶ Chạy tay từng dòng codeKiểm tra năm nhuận bằng toán tử logic: chia hết cho 4 nhưng không chia hết cho 100, hoặc chia hết cho 400.
Dữ liệu mẫu:
1#include <iostream>
2using namespace std;
3
4int main(){
5 int y;
6 cin >> y;
7 bool c1 = (y % 4 == 0 && y % 100 != 0);
8 bool c2 = (y % 400 == 0);
9 if(c1 || c2){
10 cout << "NHUAN";
11 }
12 else{
13 cout << "KHONG NHUAN";
14 }
15 return 0;
16}
ABA && B (and)A || B (or)!A (not)
truetruetruetruefalse
truefalsefalsetruefalse
falsetruefalsetruetrue
falsefalsefalsefalsetrue

if lồng nhau

Bên trong một nhánh của if có thể đặt tiếp một câu lệnh if khác, gọi là if lồng nhau. Ví dụ giải phương trình $ax + b = 0$: phải xét $a = 0$ hay không trước, rồi trong trường hợp $a = 0$ lại xét tiếp $b$ (xem bài tập 2 bên dưới). Nhớ thụt lề cho đúng tầng để đọc code không bị rối.

Vì sao xếp loại học lực phải dùng else if mà không viết mấy lệnh if rời nhau? Em xem hai cách chạy cạnh nhau với cùng một điểm số là thấy ngay sự khác biệt:

MÔ PHỎNGChuỗi else if và các lệnh if rời nhauNhập điểm d (0 … 10, ví dụ 7 hoặc 6.5). Dòng vàng đang xét, xanh là đúng, đỏ là sai, mờ là bị bỏ qua.
đang xétđiều kiện đúng, chạy lệnhđiều kiện saibị bỏ qua, không xét

Điều kiện năm nhuận có cả && lẫn || nên khá rối. Mô phỏng dưới đây tính từng vế theo đúng thứ tự máy làm, kể cả những vế máy bỏ qua không tính:

MÔ PHỎNGTính từng vế của điều kiện năm nhuậnNhập năm y (1 … 9999). Thử lần lượt 2024, 2023, 1900, 2000.
đang tínhđúngsaichưa tính / bỏ qua

Phần 4switch – case, toán tử 3 ngôi và các lỗi hay gặp

Khi cần so sánh một biến với nhiều giá trị cụ thể (1, 2, 3… hoặc 'A', 'B'…), C++ có câu lệnh switch viết gọn hơn chuỗi else if. Ví dụ in tên thứ trong tuần:

Code C++ và Python
#include <iostream>
using namespace std;

int main(){
    int t;
    cin >> t;
    switch(t){
        case 2: cout << "Thu Hai"; break;
        case 3: cout << "Thu Ba"; break;
        case 4: cout << "Thu Tu"; break;
        case 5: cout << "Thu Nam"; break;
        case 6: cout << "Thu Sau"; break;
        case 7: cout << "Thu Bay"; break;
        case 8: cout << "Chu Nhat"; break;
        default: cout << "Khong hop le";
    }
    return 0;
}
t = int(input())
match t:                     # Python 3.10 trở lên
    case 2: print("Thu Hai")
    case 3: print("Thu Ba")
    case 4: print("Thu Tu")
    case 5: print("Thu Nam")
    case 6: print("Thu Sau")
    case 7: print("Thu Bay")
    case 8: print("Chu Nhat")
    case _: print("Khong hop le")
  • break dùng để thoát khỏi switch. Quên break thì máy chạy "lố" xuống luôn các case bên dưới (ví dụ nhập 2 sẽ in liền "Thu HaiThu Ba…").
  • default giống else: chạy khi không khớp case nào.
  • switch chỉ dùng được với số nguyên và ký tự, không dùng với số thực hay xâu.

Toán tử 3 ngôi là cách viết tắt của if – else khi chỉ cần chọn 1 trong 2 giá trị:

Code C++ và Python
int mx = (a > b) ? a : b;    // nếu a > b thì mx = a, ngược lại mx = b
mx = a if a > b else b
Lỗi hay gặpViết saiViết đúng
Nhầm gán với so sánhif(n = 0)if(n == 0)
Thừa dấu ; sau if (khối lệnh luôn chạy dù điều kiện sai)if(n > 0); cout << "DUONG";if(n > 0) cout << "DUONG";
Quên ngoặc khi có 2 lệnh (lệnh thứ 2 luôn chạy)if(a > b) t = a; a = b;if(a > b){ t = a; a = b; }
Viết khoảng kiểu toán họcif(1 <= x <= 10)if(x >= 1 && x <= 10)
So sánh 2 số thực bằng ==if(0.1 + 0.2 == 0.3) (sai!)if(fabs(x - y) < 1e-9)

Bài tậpLuyện câu lệnh rẽ nhánh

Các bài dưới đây đi từ dễ đến khó dần. Nhớ thử với nhiều bộ dữ liệu khác nhau, nhất là các trường hợp đặc biệt (số 0, số âm, các giá trị bằng nhau…) vì đề thi rất hay "gài" vào đó.

Bài 1Âm, dương hay bằng 0Dễ

Nhập số nguyên $n$. In ra DUONG nếu $n \gt 0$, AM nếu $n \lt 0$, KHONG nếu $n = 0$.

Input
-12
Output
AM
💡 Gợi ý
3 trường hợp loại trừ nhau nên dùng if – else if – else. Trường hợp cuối không cần viết điều kiện n == 0 vì không dương, không âm thì chắc chắn bằng 0.
Xem code tham khảo (C++ / Python)
#include <iostream>
using namespace std;

int main(){
    int n;
    cin >> n;
    if(n > 0) cout << "DUONG";
    else if(n < 0) cout << "AM";
    else cout << "KHONG";
    return 0;
}
n = int(input())
if n > 0:
    print("DUONG")
elif n < 0:
    print("AM")
else:
    print("KHONG")
Bài 2Giải phương trình bậc nhấtDễ

Nhập 2 số thực $a, b$. Giải phương trình $ax + b = 0$: in VO NGHIEM, VO SO NGHIEM, hoặc nghiệm $x$ với 2 chữ số thập phân.

Input
2 -4
Output
2.00
💡 Gợi ý
Nếu $a \ne 0$: $x = -b / a$. Nếu $a = 0$ thì phương trình thành $0x + b = 0$: lúc này $b = 0$ thì mọi $x$ đều thoả (vô số nghiệm), còn $b \ne 0$ thì vô nghiệm. Đây là ví dụ của if lồng nhau. Rất nhiều bạn quên trường hợp $a = 0$ và chia cho 0.
Xem code tham khảo (C++ / Python)
#include <iostream>
#include <iomanip>
using namespace std;

int main(){
    double a, b;
    cin >> a >> b;
    if(a == 0){
        if(b == 0) cout << "VO SO NGHIEM";
        else cout << "VO NGHIEM";
    }
    else{
        double x = -b / a;
        cout << fixed << setprecision(2) << x;
    }
    return 0;
}
a, b = map(float, input().split())
if a == 0:
    if b == 0:
        print("VO SO NGHIEM")
    else:
        print("VO NGHIEM")
else:
    x = -b / a
    print(f"{x:.2f}")
Bài 3Ba cạnh tam giácDễ

Nhập 3 số nguyên dương $a, b, c$ ($\le 10^9$). In YES nếu đó là 3 cạnh của một tam giác, ngược lại in NO.

Input
3 4 5
Output
YES
💡 Gợi ý
Tổng 2 cạnh bất kỳ phải lớn hơn cạnh còn lại: a + b > c && a + c > b && b + c > a. Vì $a + b$ có thể tới $2 \cdot 10^9$ nên dùng long long cho an toàn. Bạn nào muốn nâng cao có thể đọc bài Bộ số tam giác.
Xem code tham khảo (C++ / Python)
#include <iostream>
using namespace std;

int main(){
    long long a, b, c;
    cin >> a >> b >> c;
    if(a + b > c && a + c > b && b + c > a) cout << "YES";
    else cout << "NO";
    return 0;
}
a, b, c = map(int, input().split())
if a + b > c and a + c > b and b + c > a:
    print("YES")
else:
    print("NO")
Bài 4Tính tiền taxiTrung bình

Giá cước taxi: km đầu tiên giá 15 000 đồng; từ km thứ 2 đến km thứ 30 giá 13 500 đồng/km; từ km thứ 31 trở đi giá 11 000 đồng/km. Nhập số km $n$ (nguyên dương), in ra số tiền phải trả.

Input
40
Output
516500
💡 Gợi ý
Chia 3 trường hợp: $n \le 1$; $1 \lt n \le 30$; $n \gt 30$. Với $n = 40$: km đầu 15 000, 29 km tiếp theo (km 2 đến 30) là $29 \times 13\,500 = 391\,500$, 10 km còn lại là $10 \times 11\,000 = 110\,000$, tổng $516\,500$. Kiểm tra lại với $n = 30$ (đúng ranh giới): $15\,000 + 29 \times 13\,500 = 406\,500$.
Xem code tham khảo (C++ / Python)
#include <iostream>
using namespace std;

int main(){
    long long n;
    cin >> n;
    long long tien;
    if(n <= 1) tien = 15000;
    else if(n <= 30) tien = 15000 + (n - 1) * 13500;
    else tien = 15000 + 29 * 13500 + (n - 30) * 11000;
    cout << tien;
    return 0;
}
n = int(input())
if n <= 1:
    tien = 15000
elif n <= 30:
    tien = 15000 + (n - 1) * 13500
else:
    tien = 15000 + 29 * 13500 + (n - 30) * 11000
print(tien)
Bài 5Số ngày trong thángTrung bình

Nhập tháng $t$ và năm $y$. In ra số ngày của tháng đó.

Input
2 2024
Output
29
💡 Gợi ý
Tháng 4, 6, 9, 11 có 30 ngày; tháng 2 có 29 ngày nếu năm nhuận, 28 ngày nếu không; các tháng còn lại 31 ngày. Dùng switch rất gọn: nhiều case viết liền nhau case 4: case 6: case 9: case 11: sẽ dùng chung một khối lệnh. Điều kiện năm nhuận lấy ở phần 3.
Xem code tham khảo (C++ / Python)
#include <iostream>
using namespace std;

int main(){
    int t, y;
    cin >> t >> y;
    switch(t){
        case 4: case 6: case 9: case 11:
            cout << 30;
            break;
        case 2:
            if((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) cout << 29;
            else cout << 28;
            break;
        default:
            cout << 31;
    }
    return 0;
}
t, y = map(int, input().split())
if t in (4, 6, 9, 11):
    print(30)
elif t == 2:
    if (y % 4 == 0 and y % 100 != 0) or y % 400 == 0:
        print(29)
    else:
        print(28)
else:
    print(31)
Bài 6Phân loại ký tựDễ

Nhập một ký tự $c$. In ra CHU HOA, CHU THUONG, CHU SO hoặc KHAC.

Input
G
Output
CHU HOA
💡 Gợi ý
Trong máy, mỗi ký tự được lưu bằng một con số (mã ASCII), các chữ cái và chữ số nằm liên tiếp nhau, nên so sánh được: chữ hoa khi c >= 'A' && c <= 'Z', tương tự với 'a'..'z' và '0'..'9'.
Xem code tham khảo (C++ / Python)
#include <iostream>
using namespace std;

int main(){
    char c;
    cin >> c;
    if(c >= 'A' && c <= 'Z') cout << "CHU HOA";
    else if(c >= 'a' && c <= 'z') cout << "CHU THUONG";
    else if(c >= '0' && c <= '9') cout << "CHU SO";
    else cout << "KHAC";
    return 0;
}
c = input()[0]
if 'A' <= c <= 'Z':
    print("CHU HOA")
elif 'a' <= c <= 'z':
    print("CHU THUONG")
elif '0' <= c <= '9':
    print("CHU SO")
else:
    print("KHAC")
Bài 7Sắp xếp 3 số tăng dầnTrung bình

Nhập 3 số nguyên $a, b, c$. In ra 3 số theo thứ tự tăng dần.

Input
5 1 3
Output
1 3 5
💡 Gợi ý
Không cần xét đủ 6 hoán vị. Chỉ cần 3 lệnh if nối tiếp: nếu $a \gt b$ thì đổi chỗ $a, b$; nếu $a \gt c$ thì đổi chỗ $a, c$ (lúc này $a$ chắc chắn nhỏ nhất); nếu $b \gt c$ thì đổi chỗ $b, c$. Hàm swap(a, b) của C++ đổi chỗ giúp mình. Đây chính là ý tưởng của các thuật toán sắp xếp sau này.
Xem code tham khảo (C++ / Python)
#include <iostream>
using namespace std;

int main(){
    int a, b, c;
    cin >> a >> b >> c;
    if(a > b) swap(a, b);    // sau lệnh này a <= b
    if(a > c) swap(a, c);    // sau lệnh này a là nhỏ nhất
    if(b > c) swap(b, c);    // sau lệnh này b <= c
    cout << a << " " << b << " " << c;
    return 0;
}
a, b, c = map(int, input().split())
if a > b:
    a, b = b, a
if a > c:
    a, c = c, a
if b > c:
    b, c = c, b
print(a, b, c)
Bài 8Góc phần tưDễ

Nhập toạ độ $(x, y)$ của một điểm, biết $x \ne 0$ và $y \ne 0$. In ra điểm đó thuộc góc phần tư thứ mấy (1, 2, 3 hay 4).

Input
-2 4
Output
2
💡 Gợi ý
Góc 1: $x \gt 0, y \gt 0$; góc 2: $x \lt 0, y \gt 0$; góc 3: $x \lt 0, y \lt 0$; góc 4: $x \gt 0, y \lt 0$. Mỗi trường hợp là 2 điều kiện nối bằng &&; trường hợp cuối dùng else.
Xem code tham khảo (C++ / Python)
#include <iostream>
using namespace std;

int main(){
    int x, y;
    cin >> x >> y;
    if(x > 0 && y > 0) cout << 1;
    else if(x < 0 && y > 0) cout << 2;
    else if(x < 0 && y < 0) cout << 3;
    else cout << 4;
    return 0;
}
x, y = map(int, input().split())
if x > 0 and y > 0:
    print(1)
elif x < 0 and y > 0:
    print(2)
elif x < 0 and y < 0:
    print(3)
else:
    print(4)

Bài tiếp theo (bài 4) là vòng lặp: dạy máy tính làm đi làm lại một việc hàng triệu lần, kết hợp với if của bài này là các bạn đã giải được rất nhiều bài tập rồi đó.

Ghi chú của mình: toàn bộ code C++ (GCC, chuẩn C++17) và Python trong bài đã được chạy thử với dữ liệu ví dụ và các trường hợp đặc biệt (số 0, số âm, ranh giới) và cho cùng kết quả. Riêng lệnh match của Python cần Python 3.10 trở lên.
Rất vui khi anh em nào đã đọc đến những dòng cuối cùng này. Anh em đọc chắc cũng mỏi mắt luôn chứ 😅 vậy anh em nghĩ người viết ra hết đống ở trên còn thế nào nữa 🤪. Vậy nên đừng tiếc gì cho mình một lời bình luận hoặc chia sẻ bài viết để động viên mình nè. Chúc anh em học tốt và gặt hái nhiều thành công 😇
Bản quyền thuộc về Thầy Nguyễn Việt Nam Sơn. Bài viết, lời giải, hình minh hoạ và mã nguồn trên trang là công sức biên soạn của thầy qua nhiều năm giảng dạy. Vui lòng không sao chép, đăng lại hay sử dụng dưới mọi hình thức khi chưa được sự đồng ý của tác giả. Nếu thấy hữu ích, hãy chia sẻ bằng đường link bài gốc nhé. Cảm ơn bạn!
Tự học thuật toán: khó ở đâu?
Đọc xong một bài giải là bước đầu. Phần lớn học sinh tự học sẽ gặp những trở ngại sau:
  • Không biết học gì trước, học gì sau, học lan man nên kiến thức bị hổng.
  • Bí bài không ai gỡ, ngồi cả buổi vẫn không ra rồi bỏ cuộc.
  • Code chạy được nhưng không đủ điểm, không biết sai ở đâu, chậm ở đâu.
  • Không có đề thi thử và người chấm, nên không biết mình đang ở mức nào.
  • Dễ nản giữa chừng khi không có ai theo sát.
Học cùng thầy Nam Sơn, các trở ngại đó được gỡ bỏ:
  • Lộ trình 111 buổi video sắp sẵn từ dòng code đầu tiên đến đề HSG thật của các tỉnh.
  • Thầy trực tiếp gỡ bí, chữa bài cho từng em qua nhóm Zalo riêng.
  • Hệ thống chấm bài tự động 24/7 và thi thử HSG hằng tuần để biết chính xác mình đang ở đâu.
  • Đóng học phí một lần, thầy kèm lâu dài: từ thi chuyên Tin đến HSG quốc gia và cả khi lên đại học.

Nhận xét