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 2: Cài đặt Code::Blocks, chương trình C++ đầu tiên, nhập xuất và kiểu dữ liệu

Bài 2 – Cài Code::Blocks, nhập xuất và kiểu dữ liệu
Series: Nhập môn lập trình thuật toán Độ khó: Dễ Bài 2 / Kiến thức nền tảng Nhập xuất Kiểu dữ liệu
// Nhập môn lập trình · Bài 2
Cài đặt Code::Blocks, chương trình C++ đầu tiên, nhập xuất và kiểu dữ liệu
Cài phần mềm để viết và chạy code C++ trên máy tính, hiểu từng dòng của chương trình đầu tiên, biết cách nhập dữ liệu từ bàn phím, in kết quả ra màn hình và chọn đúng kiểu dữ liệu để không bị tràn số.

Lời mở đầu

Ở bài 1 các bạn đã biết lập trình là gì và vì sao mình chọn C++ làm ngôn ngữ chính. Bài này mình bắt tay vào làm thật: cài phần mềm, gõ chương trình đầu tiên, rồi học 2 thứ mà bài tập nào cũng cần là nhập xuất dữ liệu và kiểu dữ liệu. Bài hơi dài nhưng toàn kiến thức nền, các bạn đọc từ từ và nhớ tự gõ lại code nhé.

Trong bài này bạn sẽ học: cài đặt Code::Blocks từng bước, viết chương trình C++ đầu tiên, hiểu biến và các kiểu dữ liệu (int, long long, double, char, string), nhập xuất với cin/cout (Python: input/print) và các phép toán. Có khung chạy tay từng dòng code 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 1Cài đặt phần mềm Code::Blocks

Để viết code C++ ta cần 2 thứ: một trình soạn thảo để gõ code và một trình biên dịch (compiler) để dịch code ra file chạy được. Code::Blocks là phần mềm miễn phí gộp sẵn cả 2 thứ đó (đi kèm trình biên dịch GCC), nhẹ, dễ dùng, và cũng là phần mềm hay được cài trên máy thi học sinh giỏi, nên mình khuyên các bạn dùng nó để bắt đầu.

Bước 1 – Tải đúng bộ cài

  1. Vào trang chủ codeblocks.org → Downloads → Binary releases.
  2. Ở mục Windows, chọn file có chữ mingw-setup: codeblocks-25.03mingw-setup.exe (bản 64-bit, đã kèm sẵn trình biên dịch GCC 14.2). Bấm vào link tải ở cột bên cạnh (FossHUB hoặc Sourceforge.net).
  3. Máy rất cũ chạy Windows 32-bit thì chọn codeblocks-25.03mingw-32bit-setup.exe.
Windows XP / Vista / 7 / 8.x / 10 / 11 – FileDownload from codeblocks-25.03-setup.exeFossHUB · Sourceforge codeblocks-25.03-nosetup.zipFossHUB · Sourceforge codeblocks-25.03mingw-setup.exeFossHUB · Sourceforge codeblocks-25.03mingw-nosetup.zipFossHUB · Sourceforge ✔ Chọn dòng tô xanh: bản có chữ "mingw" mới kèm trình biên dịch
Lỗi kinh điển: tải nhầm bản không có "mingw"
Bản codeblocks-25.03-setup.exe (không có chữ mingw) không kèm trình biên dịch. Cài xong bấm chạy sẽ báo lỗi kiểu "can't find compiler executable in your configured search path". Gặp lỗi này thì gỡ ra cài lại bản mingw-setup là xong.

Bước 2 – Cài đặt

  1. Mở file vừa tải, bấm Next → I Agree (đồng ý điều khoản).
  2. Màn hình Choose Components: để mặc định (Full: All plugins, all tools, just everything) → Next.
  3. Chọn thư mục cài (để mặc định C:\Program Files\CodeBlocks) → Install, chờ chạy xong → Finish.
  4. Lần đầu mở Code::Blocks sẽ hiện hộp thoại Compilers auto-detection: chọn dòng GNU GCC Compiler (cột Status ghi Detected) → Set as default → OK. Nếu hiện thêm hộp thoại hỏi liên kết file, chọn "Yes, associate Code::Blocks with C/C++ file types" → OK.

Bước 3 – Tạo file, gõ code và chạy

  1. Vào File → New → Empty file (hoặc bấm Ctrl + Shift + N).
  2. Bấm ngay Ctrl + S để lưu, đặt tên có đuôi .cpp, ví dụ hello.cpp. Nên để trong thư mục có tên không dấu, không khoảng trắng (ví dụ D:\LapTrinh) cho đỡ lỗi vặt. Lưu đuôi .cpp xong thì code mới được tô màu.
  3. Gõ code (chương trình ở Phần 2 bên dưới).
  4. Bấm F9 (Build and run – biên dịch rồi chạy). Một cửa sổ đen (console) hiện lên in kết quả. Dòng Process returned 0 nghĩa là chương trình kết thúc bình thường; bấm phím bất kỳ để đóng.
hello.cpp – Code::Blocks 25.03 File Edit View Search Project Build Debug Tools Settings ▶ Build and run (F9) 1#include<iostream> 2using namespacestd; 3 4intmain(){ 5cout <<"Xin chao cac ban!"<< endl; 6cout <<"Minh dang hoc C++"; 7return0; 8} C:\LapTrinh\hello.exe Xin chao cac ban!Minh dang hoc C++ Process returned 0 (0x0)execution time : 0.012 sPress any key to continue.

Gõ code ở cửa sổ chính, bấm F9, kết quả hiện ở cửa sổ console màu đen.

Hiện tượngNguyên nhân thường gặpCách sửa
Báo lỗi expected ';' before ...Quên dấu ; ở cuối lệnh (thường là dòng ngay phía trên dòng báo lỗi)Thêm dấu ;
Báo lỗi 'Cout' was not declaredC++ phân biệt chữ hoa, chữ thườngViết đúng cout, cin, main
Code không được tô màu, bấm F9 không chạyChưa lưu file, hoặc lưu thiếu đuôi .cppLưu lại với tên ten.cpp
Permission denied khi buildCửa sổ kết quả của lần chạy trước vẫn đang mởĐóng cửa sổ đen cũ rồi bấm F9 lại
In chữ tiếng Việt có dấu bị lỗi fontCửa sổ console của Windows hiển thị Unicode không tốtKhi luyện tập in chữ không dấu; đề thi cũng không bao giờ yêu cầu in tiếng Việt
Học Python thì cài gì?
Tải Python ở python.org/downloads, khi cài nhớ tick ô "Add python.exe to PATH". Sau đó mở IDLE (có sẵn khi cài Python) → File → New File, gõ code, lưu đuôi .py rồi bấm F5 để chạy. Còn nếu chưa muốn cài gì cả, các bạn có thể dùng trang Chạy code online ngay trên web mình để chạy thử cả C++ và Python.

Phần 2Chương trình C++ đầu tiên

Truyền thống của dân lập trình là chương trình đầu tiên chỉ in ra một câu chào. Các bạn gõ lại y chang code dưới đây vào Code::Blocks, bấm F9 xem kết quả, rồi bấm Tiếp ▶ trong khung chạy tay để hiểu từng dòng:

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

int main(){
    // In ra màn hình 2 dòng chữ
    cout << "Xin chao cac ban!" << endl;
    cout << "Minh dang hoc C++";
    return 0;
}
# In ra màn hình 2 dòng chữ
print("Xin chao cac ban!")
print("Minh dang hoc C++")
C++▶ Chạy tay từng dòng codeChương trình "Hello" đầu tiên: in 2 dòng chữ ra màn hình. Bấm Tiếp để xem từng dòng làm gì.
1#include <iostream>
2using namespace std;
3
4int main(){
5 // In ra màn hình 2 dòng chữ
6 cout << "Xin chao cac ban!" << endl;
7 cout << "Minh dang hoc C++";
8 return 0;
9}
Bộ khung bắt buộc của mọi chương trình C++
Từ giờ trở đi, chương trình nào các bạn cũng bắt đầu bằng bộ khung này, rồi viết các lệnh vào giữa cặp ngoặc { } của main:
#include <iostream>
using namespace std;

int main(){
    // viết các lệnh ở đây
    return 0;
}
Trong các lời giải trên web, mình hay viết #include <bits/stdc++.h> thay cho #include <iostream>: dòng này nạp tất cả thư viện chuẩn một lần (iostream, iomanip, cmath, algorithm…) nên đỡ phải nhớ từng thư viện. Trình biên dịch GCC trong Code::Blocks và các trang chấm bài đều dùng được.
  • Mỗi lệnh kết thúc bằng dấu chấm phẩy ;. Python thì không cần dấu ; nhưng mỗi lệnh phải nằm trên một dòng.
  • C++ dùng cặp ngoặc { } để gom nhóm lệnh, còn Python dùng thụt lề (4 dấu cách). Tuy C++ không bắt buộc thụt lề nhưng các bạn vẫn nên thụt cho code dễ đọc.
  • Chú thích (comment) để ghi chú cho người đọc, máy bỏ qua: C++ dùng //, Python dùng #.

Phần 3Biến và các kiểu dữ liệu cơ bản

Biến là một "chiếc hộp" có tên, nằm trong bộ nhớ máy tính, dùng để chứa dữ liệu. Trong C++, trước khi dùng biến phải khai báo: cho biết tên hộp và kiểu dữ liệu (hộp đựng loại gì: số nguyên, số thực, chữ…). Kiểu dữ liệu quyết định hộp to bao nhiêu và chứa được giá trị trong khoảng nào.

int tuoi154 byte · số nguyên double diem8.758 byte · số thực char xepLoai'A'1 byte · 1 ký tự string ten"Nam"xâu ký tự
Kiểu C++Chứa gìKích thước / phạm viVí dụPython tương ứng
intSố nguyên4 byte, từ $-2^{31}$ đến $2^{31}-1$ (khoảng ±2,1 tỷ)int n = 100;int
long longSố nguyên lớn8 byte, khoảng ±9,2 · 1018long long s = 1e18;int (không giới hạn)
doubleSố thực8 byte, chính xác khoảng 15 chữ sốdouble x = 3.14;float
char1 ký tự1 byte, viết trong nháy đơnchar c = 'A';str độ dài 1
boolĐúng / saitrue hoặc falsebool ok = true;bool (True/False)
stringXâu ký tựViết trong nháy kép, cần #include <string>string s = "abc";str

Một vài quy tắc đặt tên biến: chỉ gồm chữ cái tiếng Anh, chữ số và dấu gạch dưới _; không bắt đầu bằng chữ số; không trùng từ khoá (int, for, if…); phân biệt hoa thường (tong và Tong là 2 biến khác nhau). Nên đặt tên có ý nghĩa như tong, dem, chieuDai thay vì a1, xyz.

Python thì không cần khai báo kiểu: gán giá trị gì thì biến tự mang kiểu đó (x = 5 là int, x = 5.0 là float). Tiện, nhưng cũng vì vậy mà Python chạy chậm hơn.

Tràn số – lỗi hay gặp nhất của người mới học C++

Hộp int chỉ chứa được tới khoảng 2,1 tỷ. Nếu kết quả phép tính vượt quá thì nó không báo lỗi mà ra một số sai bét, thậm chí ra số âm. Đề bài cho $a, b \le 10^5$ mà hỏi $a \times b$ là phải nghĩ ngay tới long long. Thử bấm mẫu "Tràn số" bên dưới:

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

int main(){
    int a, b;
    cin >> a >> b;
    int x = a * b;
    long long y = 1LL * a * b;
    cout << x << endl;
    cout << y;
    return 0;
}
a, b = map(int, input().split())
x = a * b       # Python: số nguyên không giới hạn, không bao giờ tràn
y = a * b
print(x)
print(y)
C++▶ Chạy tay từng dòng codeVì sao phải chọn đúng kiểu dữ liệu: cùng phép nhân a * b nhưng lưu vào int thì bị tràn số, lưu vào long long thì đúng.
Dữ liệu mẫu:
1#include <iostream>
2using namespace std;
3
4int main(){
5 int a, b;
6 cin >> a >> b;
7 int x = a * b;
8 long long y = 1LL * a * b;
9 cout << x << endl;
10 cout << y;
11 return 0;
12}
Kinh nghiệm đi thi
Trước khi code, nhìn giới hạn đề bài và ước lượng kết quả lớn nhất: vượt $2 \cdot 10^9$ thì dùng long long. Rất nhiều bạn mất điểm oan ở các test lớn chỉ vì quên điều này. Python không bị tràn số nên không lo chuyện này.

Mô phỏng trực quan. “Biến là chiếc hộp” nghe thì dễ, nhưng nhiều bạn mới học vẫn hiểu sai dòng a = a * 2. Em bấm Tiếp để xem từng dòng lệnh làm gì với các hộp trong bộ nhớ, rồi thử đổi giá trị a, b:

MÔ PHỎNGBiến là chiếc hộp trong bộ nhớNhập giá trị ban đầu của a, b rồi chạy từng dòng. Hộp xanh lá vừa được tạo, vàng vừa bị ghi đè, xanh dương đang được đọc.
hộp mới tạohộp bị ghi đèhộp đang được đọc

Vì sao số int quá lớn lại biến thành số âm? Em hình dung các giá trị int xếp thành một vòng tròn: đi quá điểm lớn nhất là vòng sang điểm nhỏ nhất. Mô phỏng dưới đây cộng dần một số vào x để em thấy kim “quay vòng”:

MÔ PHỎNGTràn số int: vòng số quay qua đáyNhập x, số cộng thêm d và số lần cộng. So sánh hộp int với hộp long long sau mỗi lần cộng.
int còn đúngint đã tràn, sailong long (đúng)

Phần 4Nhập xuất dữ liệu và các phép toán

C++
  • Nhập: cin >> a >> b; đọc lần lượt từng số, các số cách nhau dấu cách hay xuống dòng đều được.
  • Xuất: cout << a << " " << b << endl; nối nhiều thứ bằng <<, tự thêm dấu cách " ", endl để xuống dòng.
  • Số thực: cout << fixed << setprecision(2) << x; (cần #include <iomanip>).
Python
  • Nhập: input() đọc cả một dòng thành xâu. Muốn 1 số: n = int(input()). Nhiều số trên 1 dòng: a, b = map(int, input().split()).
  • Xuất: print(a, b) tự thêm dấu cách giữa các giá trị và tự xuống dòng ở cuối.
  • Số thực: print(f"{x:.2f}").
Phép toánC++PythonVí dụ với a = 17, b = 5
Cộng, trừ, nhân+ - *+ - *22, 12, 85
Chia lấy phần nguyêna / b (khi a, b đều là số nguyên)a // b3
Chia lấy dưa % ba % b2
Chia ra số thực(double)a / b hoặc a / 5.0a / b3.4
Luỹ thừapow(a, b) (thư viện cmath, trả về số thực)a ** b1419857

Chạy tay chương trình tính đủ các phép toán để thấy rõ sự khác nhau giữa chia nguyên, chia dư và chia số thực:

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

int main(){
    int a, b;
    cin >> a >> b;
    cout << a + b << endl;
    cout << a - b << endl;
    cout << a * b << endl;
    cout << a / b << endl;
    cout << a % b << endl;
    double c = (double)a / b;
    cout << fixed << setprecision(2) << c << endl;
    return 0;
}
a, b = map(int, input().split())
print(a + b)
print(a - b)
print(a * b)
print(a // b)       # chia lấy phần nguyên
print(a % b)        # chia lấy dư
c = a / b           # trong Python, dấu / luôn cho số thực
print(f"{c:.2f}")
C++▶ Chạy tay từng dòng codeNhập 2 số nguyên a, b rồi in tổng, hiệu, tích, thương nguyên, số dư và thương số thực (2 chữ số thập phân).
Dữ liệu mẫu:
1#include <iostream>
2#include <iomanip>
3using namespace std;
4
5int main(){
6 int a, b;
7 cin >> a >> b;
8 cout << a + b << endl;
9 cout << a - b << endl;
10 cout << a * b << endl;
11 cout << a / b << endl;
12 cout << a % b << endl;
13 double c = (double)a / b;
14 cout << fixed << setprecision(2) << c << endl;
15 return 0;
16}
Bẫy: chia 2 số nguyên trong C++
cout << 7 / 2; in ra 3 chứ không phải 3.5, vì 7 và 2 đều là số nguyên nên C++ chia lấy phần nguyên. Muốn ra 3.5 phải có ít nhất 1 số là số thực: 7.0 / 2 hoặc (double)7 / 2. Ngoài ra với số âm, C++ và Python cũng khác nhau: C++ cho -7 / 2 = -3 và -7 % 2 = -1, còn Python cho -7 // 2 = -4 và -7 % 2 = 1.

Một ứng dụng rất hay của / và %: đổi đơn vị. Ví dụ đổi $n$ giây ra giờ, phút, giây:

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

int main(){
    int n;
    cin >> n;
    int gio = n / 3600;
    int du = n % 3600;
    int phut = du / 60;
    int giay = du % 60;
    cout << gio << " gio " << phut << " phut " << giay << " giay";
    return 0;
}
n = int(input())
gio = n // 3600
du = n % 3600
phut = du // 60
giay = du % 60
print(gio, "gio", phut, "phut", giay, "giay")
C++▶ Chạy tay từng dòng codeĐổi n giây ra giờ, phút, giây: dùng phép chia nguyên / và chia lấy dư %.
Dữ liệu mẫu:
1#include <iostream>
2using namespace std;
3
4int main(){
5 int n;
6 cin >> n;
7 int gio = n / 3600;
8 int du = n % 3600;
9 int phut = du / 60;
10 int giay = du % 60;
11 cout << gio << " gio " << phut << " phut " << giay << " giay";
12 return 0;
13}

Phép / và % với số nguyên là chỗ các bạn mới học hay nhầm nhất. Em xem mô phỏng chia kẹo dưới đây: chia đều cho mỗi bạn b viên, số bạn nhận được chính là a / b, số kẹo thừa là a % b:

MÔ PHỎNGChia nguyên / và chia dư % qua trò chia kẹoNhập số kẹo a (0 … 60) và số kẹo mỗi bạn b (1 … 12).
vừa phátđã phátcòn lạiphần dư

Bài tậpLuyện nhập xuất và kiểu dữ liệu

Mỗi bài các bạn tự code bằng C++ (và Python nếu muốn), chạy với ví dụ xem có đúng output không. Bí thì mở gợi ý, vẫn bí mới xem code tham khảo nhé.

Bài 1Lời chàoDễ

Nhập vào tên của bạn (một từ, không dấu, không có dấu cách). In ra Xin chao <tên>!.

Input
Nam
Output
Xin chao Nam!
💡 Gợi ý
Khai báo biến kiểu string (nhớ #include <string>), đọc bằng cin >> ten; rồi in: cout << "Xin chao " << ten << "!";. Chú ý dấu cách sau chữ "chao".
Xem code tham khảo (C++ / Python)
#include <iostream>
#include <string>
using namespace std;

int main(){
    string ten;
    cin >> ten;
    cout << "Xin chao " << ten << "!";
    return 0;
}
ten = input()
print("Xin chao " + ten + "!")
Bài 2Chu vi và diện tích hình chữ nhậtDễ

Nhập 2 số nguyên dương $a, b$ ($a, b \le 10^9$) là chiều dài và chiều rộng. In ra chu vi và diện tích, cách nhau một dấu cách.

Input
3 4
Output
14 12
💡 Gợi ý
Chu vi $= 2(a + b)$, diện tích $= a \times b$. Diện tích lớn nhất là $10^9 \times 10^9 = 10^{18}$, vượt xa int nên phải khai báo long long a, b;. Đây đúng là cái bẫy tràn số ở phần 3.
Xem code tham khảo (C++ / Python)
#include <iostream>
using namespace std;

int main(){
    long long a, b;          // a * b có thể tới 10^18 nên dùng long long
    cin >> a >> b;
    cout << 2 * (a + b) << " " << a * b;
    return 0;
}
a, b = map(int, input().split())
print(2 * (a + b), a * b)
Bài 3Diện tích hình trònDễ

Nhập bán kính $r$ (số thực). In ra diện tích hình tròn với đúng 2 chữ số thập phân, lấy $\pi = 3.14159265358979$.

Input
2.5
Output
19.63
💡 Gợi ý
Dùng kiểu double cho cả $r$ và kết quả $S = \pi r^2$, in bằng fixed << setprecision(2). Hằng số $\pi$ nên khai báo const double PI = 3.14159265358979; (const nghĩa là hằng, không cho đổi giá trị). Python đọc số thực bằng float(input()).
Xem code tham khảo (C++ / Python)
#include <iostream>
#include <iomanip>
using namespace std;

int main(){
    const double PI = 3.14159265358979;
    double r;
    cin >> r;
    cout << fixed << setprecision(2) << PI * r * r;
    return 0;
}
PI = 3.14159265358979
r = float(input())
print(f"{PI * r * r:.2f}")
Bài 4Đổi độ C sang độ FDễ

Nhập nhiệt độ $C$ (độ C). In ra nhiệt độ tương ứng theo độ F với 1 chữ số thập phân, biết $F = C \times \dfrac{9}{5} + 32$.

Input
37
Output
98.6
💡 Gợi ý
Cẩn thận: nếu khai báo $C$ là int thì C * 9 / 5 là phép chia nguyên: $37 \times 9 = 333$, $333 / 5 = 66$ (mất phần lẻ 0.6) → in ra 98 thay vì 98.6. Cách an toàn là khai báo double c; từ đầu.
Xem code tham khảo (C++ / Python)
#include <iostream>
#include <iomanip>
using namespace std;

int main(){
    double c;
    cin >> c;
    double f = c * 9 / 5 + 32;
    cout << fixed << setprecision(1) << f;
    return 0;
}
c = float(input())
f = c * 9 / 5 + 32
print(f"{f:.1f}")
Bài 5Tổng các chữ số của số có 3 chữ sốDễ

Nhập số nguyên $n$ có đúng 3 chữ số. In ra tổng các chữ số của nó.

Input
123
Output
6
💡 Gợi ý
Dùng phép chia nguyên và chia dư: hàng trăm là n / 100, hàng chục là n / 10 % 10, hàng đơn vị là n % 10. Ví dụ $123$: $123/100 = 1$, $123/10 = 12$ rồi $12 \% 10 = 2$, $123 \% 10 = 3$. Kỹ thuật "tách chữ số" này bài 4 (vòng lặp) sẽ dùng lại cho số có bao nhiêu chữ số cũng được.
Xem code tham khảo (C++ / Python)
#include <iostream>
using namespace std;

int main(){
    int n;
    cin >> n;
    int tram = n / 100;        // chữ số hàng trăm
    int chuc = n / 10 % 10;    // chữ số hàng chục
    int dv = n % 10;           // chữ số hàng đơn vị
    cout << tram + chuc + dv;
    return 0;
}
n = int(input())
tram = n // 100        # chữ số hàng trăm
chuc = n // 10 % 10    # chữ số hàng chục
dv = n % 10            # chữ số hàng đơn vị
print(tram + chuc + dv)
Bài 6Trung bình cộngDễ

Nhập 3 số nguyên $a, b, c$. In ra trung bình cộng của chúng với 2 chữ số thập phân.

Input
1 2 4
Output
2.33
💡 Gợi ý
Viết (a + b + c) / 3 sẽ ra 2 (chia nguyên)! Phải chia cho 3.0 để ra số thực rồi mới in với setprecision(2).
Xem code tham khảo (C++ / Python)
#include <iostream>
#include <iomanip>
using namespace std;

int main(){
    int a, b, c;
    cin >> a >> b >> c;
    double tb = (a + b + c) / 3.0;    // chia cho 3.0 để ra số thực
    cout << fixed << setprecision(2) << tb;
    return 0;
}
a, b, c = map(int, input().split())
tb = (a + b + c) / 3
print(f"{tb:.2f}")
Bài 7Hoán đổi 2 sốDễ

Nhập 2 số nguyên $a, b$. Hoán đổi giá trị của 2 biến rồi in ra $a$ và $b$.

Input
3 5
Output
5 3
💡 Gợi ý
Đây là bài "đổi 2 cốc nước" ở bài 1: dùng biến tạm t: t = a; a = b; b = t;. Đề yêu cầu đổi giá trị của biến, nên đừng "ăn gian" bằng cách in b trước a nhé 😄.
Xem code tham khảo (C++ / Python)
#include <iostream>
using namespace std;

int main(){
    int a, b;
    cin >> a >> b;
    int t = a;     // cốc thứ 3
    a = b;
    b = t;
    cout << a << " " << b;
    return 0;
}
a, b = map(int, input().split())
a, b = b, a
print(a, b)
Bài 8Chia kẹoDễ

Có $n$ cái kẹo chia đều cho $k$ bạn. Hỏi mỗi bạn được bao nhiêu cái và còn dư bao nhiêu cái?

Input
17 5
Output
3 2
💡 Gợi ý
Mỗi bạn được n / k cái, còn dư n % k cái. Python dùng n // k và n % k.
Xem code tham khảo (C++ / Python)
#include <iostream>
using namespace std;

int main(){
    int n, k;
    cin >> n >> k;
    cout << n / k << " " << n % k;
    return 0;
}
n, k = map(int, input().split())
print(n // k, n % k)

Bài tiếp theo (bài 3) mình sẽ học câu lệnh điều kiện rẽ nhánh if – else: dạy cho máy tính biết "nếu… thì… còn không thì…".

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à cho cùng kết quả (riêng chương trình tràn số thì cố ý cho thấy C++ khác Python). Các khung chạy tay mô phỏng đúng thứ tự máy thực hiện chương trình C++.
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