Violet
Dethi

Tin tức thư viện

Chức năng Dừng xem quảng cáo trên violet.vn

12087057 Kính chào các thầy, cô! Hiện tại, kinh phí duy trì hệ thống dựa chủ yếu vào việc đặt quảng cáo trên hệ thống. Tuy nhiên, đôi khi có gây một số trở ngại đối với thầy, cô khi truy cập. Vì vậy, để thuận tiện trong việc sử dụng thư viện hệ thống đã cung cấp chức năng...
Xem tiếp

Hỗ trợ kĩ thuật

  • (024) 62 930 536
  • 091 912 4899
  • hotro@violet.vn

Liên hệ quảng cáo

  • (024) 66 745 632
  • 096 181 2005
  • contact@bachkim.vn

Tài liệu bồi dưỡng HSG môn tin 8,9 C++

Wait
  • Begin_button
  • Prev_button
  • Play_button
  • Stop_button
  • Next_button
  • End_button
  • 0 / 0
  • Loading_status
Nhấn vào đây để tải về
Báo tài liệu có sai sót
Nhắn tin cho tác giả
(Tài liệu chưa được thẩm định)
Nguồn: Sưu tầm
Người gửi: Chu Văn Dương
Ngày gửi: 15h:24' 04-10-2025
Dung lượng: 655.4 KB
Số lượt tải: 211
Số lượt thích: 0 người
TÀI LIỆU
DƯỠNG HỌC SINH GIỎI

C++

TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI – NGÔN NGỮ LẬP TRÌNH C++

GIỚI THIỆU
Trong những năm qua, ngành giáo dục và đào tạo đã tổ chức và triển
khai nhiều cuộc thi học sinh giỏi môn Tin học. Về cơ bản, đa số các thầy /
cô giáo đang hướng dẫn sử dụng ngôn ngữ lập trình Pascal – Đây là ngôn
ngữ đã quá cổ điển và không còn nhận được sự hỗ trợ trên các hệ điều hành
mới, đặc biệt là với những màn hình có độ phân giải cao, việc sử dụng công
cụ này ngày càng trở lên khó khăn hơn rất nhiều.
Tài liệu được xây dựng dựa trên cơ sở các nguồn dữ liệu do các đồng
nghiệp cung cấp và một số dữ liệu từ Internet cũng như các kiến thức tác
giả đã tìm hiểu, nghiên cứu và phát triển trong quá trình giảng dạy.
Hiện tại, công tác thi học sinh giỏi ở Việt Nam đang sử dụng phần
mềm Themis để chấm điểm với các ngôn ngữ lập trình được sử dụng là
Pascal, C++, Python và Java. Các nội dung INPUT và OUPUT được ghi lại
vào tệp *.INP và *.OUT, vì vậy tất cả các bài tập thực hành chúng tôi trình
bày theo kiểu đề thi để các em học sinh có thể dễ dàng tiếp cận và tránh
được những sai sót trong quá trình làm bài.
C++ là ngôn ngữ lập trình hướng đối tượng. Tuy nhiên, tác giả không
đề cập đến vấn đề hướng đối tượng, chỉ tập trung vào phần lập trình hướng
cấu trúc.
Về cơ bản, môn Tin học cũng giống như môn Toán. Chúng ta tập trung
chủ yếu vào phần thực hành. Tác giả cũng không đi sâu vào khai thác các
vấn đề về lý thuyết mà thông qua các bài tập sẽ giúp cho các em học sinh
có thể dễ dàng nắm bắt được các kiến thức thông qua việc giải quyết các
bài toán cụ thể.
Tài liệu được xây dựng từ những vấn đề đơn giản đến phức tạp theo
các nội dung cơ bản của ngôn ngữ lập trình C++.
Tác giả rất mong nhận được sự đóng góp ý kiến của quý thầy / cô
cũng như các em học sinh tham gia ôn luyện và thi học sinh giỏi bộ môn Tin
học khối THCS.
Xin trân trọng cảm ơn./.

TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI – NGÔN NGỮ LẬP TRÌNH C++

MỤC LỤC
1. Giới thiệu ngôn ngữ lập trình C++ ................................................................................................................ 1
2. Môi trường lập trình C++ .................................................................................................................................... 1
3. Các kiểu dữ liệu .........................................................................................................................................................2
4. Biến, hằng, các phép toán và toán tử .................................................................................................... 3
5. Hàm ...................................................................................................................................................................................4
6. Tệp và ghi tệp ............................................................................................................................................................ 5
7. Cấu trúc điều kiện ...................................................................................................................................................9
8. Vòng lặp ....................................................................................................................................................................... 18
9. Mảng .............................................................................................................................................................................. 35
10. Xâu ký tự (string) ............................................................................................................................................... 55

1. Giới thiệu ngôn ngữ lập trình C++
C++ là ngôn ngữ lập trình phổ biến nhất trên thế giới được phát triển bởi
Bjarne Stroustrup. C++ là một phần mở rộng của ngôn ngữ C. Về cơ bản C và C++
gần như là sự tương đồng.
C++ cung cấp cho người lập trình khả năng kiểm soát và tối ưu hóa đối với
tài nguyên hệ thống và bộ nhớ, được sử dụng để phát triển các hệ điều hành phổ
biến như hệ điều hành windows, linus, ios…, phát triển giao diện người dùng đồ họa
và các hệ thống nhúng.
C++ là một ngôn ngữ lập trình hướng đối tượng mang lại cấu trúc rõ ràng
cho các chương trình và cho phép mã được sử dụng lại, giảm chi phí phát triển.
C++ là nền tảng để phát triển các ngôn ngữ ứng dụng bậc cao hơn như PHP,
Java, javascript, C#, ...

2. Môi trường lập trình C++
Để làm việc với C++ bạn cần phải có trình soạn thảo và cài đặt môi trường
để biên dịch mã. Ở đây, có một số công cụ hoàn toàn miễn phí và sử dụng phổ
biến như Dev C++, Eclipse, Code::Block, Visual Studio… Các phần mềm này có sự
hỗ trợ cho việc soạn thảo cũng như tạo sẵn môi trường để biên dịch mã C++.
Để bắt đầu với C++, chúng ta đến với chương trình Hello World:

#include
using namespace std;
int main() {
cout << "Hello World!";
return 0;
}
Trong đó:
- Dòng #include là thư viện được khai báo trong mỗi
chương trình C++. Đây là môi trường nhập / xuất (input / output) dữ liệu trong
C++. Ngoài ra, với các bài toán chúng ta cần quan tâm đến 2 thư viện toán học
đặc biệt quan trọng là cmath và algorithm ngoài ra chúng ta cũng cần bổ sung
thêm thư viện cstring để xử lý các bài toán về xâu ký tự.
- Dòng using namespace std là không gian tên. Nếu ko có dòng này bạn
cần nhập std::cout << “Hello World!”;
- Toàn bộ chương trình chính sẽ nằm trong phần:

int main() {
// Nội dung lệnh
return 0;
}
Lưu ý:
- Mọi câu lệnh trong C++ đều kết thúc bằng dấu “;”.

- Tất cả các câu lệnh, từ khóa trong C++ đều là chữ in thường.
- Để nhập dữ liệu ta sử dụng cin, xuất dữ liệu ta sử dụng cout.
Ví dụ:
#include
using namespace std;
int main() {
int a;
cin >> a;
cout << "a = " << a;
return 0;
}
- Nếu bạn bỏ qua không gian tên using namespace std thì câu lệnh nhập
/ xuất dữ liệu sẽ cần khai báo std:
#include
int main() {
std::cout << "Hello World!";
return 0;
}
- Hai câu lệnh return 0 và return 1 là hai giá trị trả về duy nhất của hàm
main() trong C++.
Hai giá trị trả về này của hàm int main() có ý nghĩa như sau:
Chúng ta chỉ đinh return 0 để kết thúc chương trình theo cách bình thường
(normal termination). Điều đó có nghĩa là kể cả chương trình có xảy ra lỗi hay
không, thì C++ vẫn ngầm định là chương trình đã được kết thúc mà không có lỗi
xảy ra.
Chúng ta chỉ đinh return 1 để kết thúc chương trình theo cách bất thường
(abnormal termination). Điều đó có nghĩa là khi chương trình xảy ra lỗi, thì lỗi này
sẽ được trả về khi kết thúc chương trình.

3. Các kiểu dữ liệu
Với các bài toán xử lý trên C++, chúng ta cần quan tâm một số kiểu dữ liệu
như sau:
- Kiểu số nguyên int là kiểu dữ liệu thường xuyên sử dụng
- Kiểu string, char: khai báo trong những bài toán về xâu ký tự
- Kiểu bool: Trả về true (1) hoặc false (0)
- Kiểu float, double: trả về kiểu số thực
- Kiểu long: Trả về kiểu số nguyên lớn hơn int

Tùy theo tình huống và dạng bài tập mà chúng ta sử dụng dữ liệu làm sao
cho hợp lý. Có những bài toán yêu cầu về số nguyên lớn ta có thể sử dụng int8_t,
int32_t, int64_t để tránh trường hợp file test với số nguyên lớn làm bạn mất
điểm do bị tràn số. Còn với những trường hợp không yêu cầu về số nguyên lớn ta
có thể sử dụng kiểu thông dụng là int.
Các kiểu dữ liệu thường dùng là int, char, string, float, double

4. Biến, hằng, các phép toán và toán tử
- Khai báo biến: Việc khai báo biến trong C++ rất đơn giản, cấu trúc chung
thường là:
Kiểu_dữ_liệu Tên_biến;
Hoặc: Kiểu_dữ_liệu biến1, biến2, biến3;
Ví dụ: int a, b, c;
Bạn hoàn toàn có thể khai báo biến đồng thời với việc gán một giá trị cụ
thể nào đó cho biến.
Ví dụ: int a = 50, b = 100;
Bạn cần phân biệt biến toàn cục và biến cục bộ: Biến toàn cục là biến chạy
trong toàn chương trình, còn biến cục bộ chỉ chạy nội bộ trong một hàm.
- Khai báo hằng: Việc khai báo hằng cũng giống kiểu khai báo biến
Ví dụ: const int a = 50;
- Các phép toán: C++ sử dụng các phép toán cơ bản giống như các ngôn
ngữ lập trình khác:
+ Phép cộng: +
+ Phép trừ: + Phép nhân: *
+ Phép chia: /
+ Phép chia có dư: %
- Toán tử: Chúng ta cần lưu ý một số toán tử thông dụng trong C++

Toán tử
==
!=
>
<
>=
<=

Ý nghĩa
Bằng
Không bằng
Lớn hơn
Nhỏ hơn
Lớn hơn hoặc bằng
Nhỏ hơn hoặc bằng

Ví dụ
x == y
x != y
x > y
x < y
x >= y
x <= y

- Toán tử logic: Chúng ta quan tâm đến 3 toán tử logic thường dùng:
Toán tử
&&
||
!

Ý nghĩa
AND
OR
NOT

Ví dụ
x < 5 && x < 10
x < 5 || x < 4
!(x < 5 && x < 10)

- Toán tử gán: Giữ vai trò đặc biệt quan trọng trong lập trình. Chúng ta cần
chú ý một số phép gán trong C++ dưới đây:
Toán tử
=
+=
-=
*=
/=
%=
++
--

Ví dụ
x = 5
x += 3
x -= 3
x *= 3
x /= 3
x %= 3
x++
x--

Tương đương
x = 5
x = x + 3
x = x - 3
x = x * 3
x = x / 3
x = x % 3
x = x + 1
x = x - 1

5. Hàm
Hàm là một nhóm các lệnh đi cùng nhau để thực hiện một nhiệm vụ nào đó
trong chương trình. Mỗi chương trình C++ có ít nhất một hàm: int main()
Cấu trúc:
Kiểu_trả_về tên_Hàm(Danh sách tham số) {
Thân hàm
}
Trong đó:
Kiểu trả về: Một hàm có thể trả về một giá trị. Kieu_tra_ve là dạng dữ liệu
của giá trị mà hàm trả về. Vài hàm cung cấp các hoạt động và không trả về giá
trị nào cả. Đó là hàm void.
Tên hàm: Đây là tên thực sự của hàm. Tên hàm và danh sách tham số cấu
tạo nên dấu hiệu hàm.
Danh sách tham số: Khi hàm được gọi, bạn phải truyền vào danh sách các
tham số. Một giá trị hướng đến một tham số thực tế. Danh sách tham số có các
kiểu, thứ tự và số lượng các tham số của hàm. Các tham số trong hàm là tùy chọn,
nghĩa là một hàm có thể không có tham số.

Thân hàm: Phần thân của một hàm bao gồm tập hợp các lệnh xác định
những gì mà hàm thực hiện.
Để gọi hàm, đơn giản là chỉ cần truyền các tham số được yêu cầu cùng với
tên của hàm và nếu hàm trả về các giá trị, bạn có thể dự trữ các giá trị trả về. Xét
một ví dụ đơn giản về hàm tính tổng hai số:
#include
using namespace std;
int sum(int a, int b) {
int ketqua;
ketqua = a + b;
return ketqua;
}
int main () {
// Khai bao bien cuc bo:
int a = 100;
int b = 200;
int ketqua;
// goi ham de tinh tong hai so.
ketqua = sum(a, b);
cout << "Tong gia tri la: " << ketqua << endl;
// goi ham mot lan nua.
ketqua = sum(a);
cout << "Tong gia tri la: " << ketqua << endl;
return 0;
}

6. Tệp và ghi tệp
Với việc ghi và đọc file chúng ta có thể sử dụng một trong 2 cách:
Cách 1: Sử dụng thư viện fstream
#include
#include
using namespace std;
int main() {
ifstream fin;
ofstream fout;
int a, b, Tong = 0, Tich = 0;
fin.open("Tong.INP",ios::in);
fout.open("Tong.OUT",ios::out);
fin>>a;
fin>>b;
fin.close();
fout << a + b << endl;
fout << a * b;
fout.close();
return 0;
}

Cách 2: Sử dụng Hàm freopen:
#include
using namespace std;
int main() {
int a;
freopen("TongChuSo.INP","r",stdin);
freopen("TongChuSo.OUT","w",stdout);
cin >> a;
int c = a % 10;
int d = a / 10;
cout << c + d;
return 0;
}
Bài tập
Bài 1. Nhập số nguyên dương n là số có hai chữ số. Tính tổng các chữ số
của n. Ví dụ:
PERM.INP
34

PERM.OUT
7

Thuật toán: Ta có ̅̅̅
𝑎𝑏 = 10𝑎 + 𝑏. Như vậy: nếu chia số nguyên a cho 10 ta
được số dư là b, còn phần nguyên chính là b.
Code tham khảo:
#include
using namespace std;
int main() {
freopen("PERM.INP","r",stdin);
freopen("PERM.OUT","w",stdout);
int a;
cin >> a;
int T = a % 10 + a / 10;
cout << T;
return 0;
}
Bài 2. Nhập số nguyên dương N là số có 3 chữ số. Tìm tích các chữ số của
N. Ví dụ:
TICH.INP
TICH.OUT
254
40
Code tham khảo:
#include
using namespace std;
int main() {
freopen("TICH.INP","r",stdin);
freopen("TICH.OUT","w",stdout);
int n;

cin >> n;
int T = n % 10;
n /= 10;
T *= n % 10;
T *= n / 10;
cout << T;
return 0;
}
Bài 3. Nhập số n nguyên dương (n <= 232). Tính S =

𝑛(𝑛+1)(𝑛+2)
3

Ví dụ:
TS.INP
7

TS.OUT
168

Thuật toán: Để có được các chữ số của N, ta chia lần lượt cho 10 lấy phần
nguyên và phần dư, phần dư đầu tiên sẽ là chữ số hàng đơn vị, phần dư lần chia
thứ 2 sẽ là chữ số hàng chục và phần nguyên của lần chia thứ 2 sẽ là chữ số hàng
trăm.
Code tham khảo:
#include
using namespace std;
int main() {
freopen("TS.INP","r",stdin);
freopen("TS.OUT","w",stdout);
int64_t n;
cin >> n;
int64_t s = n*(n+1)*(n+2) / 3;
cout << s;
return 0;
}
Bài 4. Nhập số thời gian là T (giây). Người ta đổi T thành a giờ, b phút, c
giây.
Hãy tìm a, b, c. Ví dụ:
TIME.INP
6695

TIME.OUT
1:51:35

Thuật toán:
Ta có: 1 giờ = 3600 giây
1 phút = 60 giây
- Lấy số giây chia cho 3600 tính được số giờ.
- Tiếp tục chia phần dư cho 60 được số phút
- Cuối cùng, phần dư còn lại sẽ là số giây.
Code tham khảo:

#include
using namespace std;
int main() {
freopen("TIME.INP","r",stdin);
freopen("TIME.OUT","w",stdout);
int t;
cin >> t;
int a = t / 3600;
t %= 3600;
int b = t / 60;
int c = t % 60;
cout << a << ":" << b << ":" << c;
return 0;
}
Bài 5. Nam có X đồng. Biết rằng tờ tiền có mệnh giá là 100, 50, 20, 10, 5, 2, 1.
Hỏi số lượng tờ tiền ít nhất mà Nam cầm trên tay là bao nhiêu? Liệt kê từng loại
tiền mà Nam có. Ví dụ: Dòng thứ nhất ghi tổng số tờ tiền, dòng thứ hai ghi số tờ
tiền của từng loại (mỗi loại cách nhau một dấu cách). Ví dụ:
VND.INP
6577

VND.OUT
69
65 1 1 0 1 1 0

Code tham khảo:
#include
using namespace std;
int main() {
freopen("VND.INP","r",stdin);
freopen("VND.OUT","w",stdout);
int t;
cin >> t;
int a = t / 100;
t %= 100;
int b = t / 50;
t %= 50;
int c = t / 20;
t %= 20;
int d = t / 10;
t %= 10;
int e = t / 5;
t %= 5;
int f = t / 2;
t %= 2;
int g = t;
cout << a+b+c+d+e+f+g << endl;
cout << a << " " << b << " " << c << " "
<< d << " " << e << " " << f << " " << g;
return 0;

}

7. Cấu trúc điều kiện
Cũng giống như các ngôn ngữ lập trình khác, trong C++ chúng ta có thể sử
dụng một trong 3 cấu trúc: if, if… else, if… else if… else hoặc switch …
case. Đây là những cấu trúc phổ biến và rất quen thuộc trong lập trình.
Cú pháp câu lệnh if:
if (điều kiện) {
// khối mã được thực thi nếu điều kiện là đúng
}
Cú pháp câu lệnh if … else
if (điều kiện) {
// khối mã được thực thi nếu điều kiện là đúng
}
else {
// Khối lệnh thực thi nếu điều kiện là sai
}
Cú pháp câu lệnh if … else if … else:
if (điều kiện) {
// khối mã thực thi nếu điều kiện 1 là đúng
}
else if (điều kiện) {
// khối mã thực thi nếu điều kiện 2 là đúng
} else {
// Khối lệnh thực thi nếu 2 đk trên là sai
}
Cú pháp câu lệnh switch … case
switch(expression) {
case x:
// code block
break;
case y:
// code block
break;
default:
// code block
}
Ví dụ 1. Giải và biện luận phương trình bậc nhất ax + b = 0 với khối lệnh điều
kiện if … else
#include
using namespace std;

int main() {
freopen("PTBN.INP","r",stdin);
freopen("PTBN.OUT","w",stdout);
float a, b;
cin >> a >> b;
if (a == 0) {
if (b == 0) {
cout << "PT co vo so nghiem";
}
else {
cout << "PT vo nghiem";
}
}
else {
cout << "x = " << -b/a;
}
return 0;
}
Ví dụ 2. Xét một nội dung sử dụng cấu trúc switch … case:
int day = 4;
switch (day) {
case 1:
cout << "Monday";
break;
case 2:
cout << "Tuesday";
break;
case 3:
cout << "Wednesday";
break;
case 4:
cout << "Thursday";
break;
case 5:
cout << "Friday";
break;
case 6:
cout << "Saturday";
break;
case 7:
cout << "Sunday";
break;
}
Ngoài cách trên, ta có thể có cách viết tắt của câu lệnh if:
#include
#include

using namespace std;
int main() {
int time = 20;
string result = (time < 18)
? "Good day." : "Good evening.";
cout << result;
return 0;
}
Câu lệnh trên tương đương với câu lệnh dưới đây:
#include
#include
using namespace std;
int main() {
int time = 20;
string result;
if (time < 20) result = "Gooday";
else result = "Good evening";
cout << result;
return 0;
}
Bài tập
Bài 1. Nhập số nguyên dương x, kiểm tra xem x là số chẵn hay số lẻ?
Ví dụ:
CHANLE.INP
45

CHANLE.OUT
LE

Code tham khảo:
#include
using namespace std;
int main() {
freopen("CHANLE.INP","r",stdin);
freopen("CHANLE.OUT","w",stdout);
int n;
cin >> n;
if (n % 2 == 0) cout << "CHAN";
else cout << "LE";
return 0;
}
Bài 2. Nhập số nguyên n. Nếu n là số chính phương thông báo TRUE, ngược
lại thông báo FALSE. Ví dụ:
CP.INP
45
Code tham khảo:

CP.OUT
FALSE

#include
#include
using namespace std;
int main() {
freopen("CP.INP","r",stdin);
freopen("CP.OUT","w",stdout);
int a;
cin >> a;
if ((float)sqrt(a) == (int)sqrt(a)) cout << "TRUE";
else cout << "FALSE";
return 0;
}
Bài 3. Nhập số nguyên a và b. Tìm giá trị lớn nhất của a, b. Ví dụ:
MAX.INP
39 90

MAX.OUT
90

Code tham khảo:
#include
#include
using namespace std;
int main() {
freopen("MAX.INP","r",stdin);
freopen("MAX.OUT","w",stdout);
int a, b;
cin >> a >> b;
int max = a;
if (max < b) max = b;
cout << max;
return 0;
}
Bài 4. Nhập số nguyên a, b, c. Tìm giá trị lớn nhất của a, b và c. Ví dụ:
MAX.INP
35 46 25

MAX.OUT
46

Code tham khảo:
#include
using namespace std;
int main() {
freopen("MAX.INP","r",stdin);
freopen("MAX.OUT","w",stdout);
int a, b, c;
cin >> a >> b >> c;
int max = a;
if (max < b) max = b;
if (max < c) max = c;

cout << max;
return 0;
}
Bài 5. Nhập số nguyên a, b, c, d. Tìm giá trị lớn nhất của a, b, c, d. Ví dụ:
MAX.INP
27 45 22 36

MAX.OUT
45

Code tham khảo:
#include
#include
using namespace std;
int main() {
freopen("MAX.INP","r",stdin);
freopen("MAX.OUT","w",stdout);
int a, b, c, d;
cin >> a >> b >> c >> d;
int max = a;
if (max < b) max = b;
if (max < c) max = c;
if (max < d) max = d;
cout << max;
return 0;
}
Bài 6. Nhập 2 số nguyên a, b có giá trị trong đoạn [0, 9]. Bình ghép nó thành
số có hai chữ số. Tìm số lớn nhất mà Bình có thể có được. Ví dụ:
MAX.INP
68

MAX.OUT
86

Code tham khảo:
#include
#include
using namespace std;
int main() {
freopen("MAX.INP","r",stdin);
freopen("MAX.OUT","w",stdout);
int a, b, c, d;
cin >> a >> b;
c = 10*a + b;
d = 10*b + a;
int max = c;
if (max < d) max = d;
cout << max;
return 0;
}
Bài 7. Nhập a, b nguyên. Hãy giải và biện luận phương trình ax + b = 0.

• Nếu vô nghiệm thông báo None.
• Nếu vô số nghiệm thông báo Multiple.
• Nếu có nghiệm, đưa ra dạng x = -b / a;
Ví dụ:
PTBN.INP
06

PTBN.OUT
None

Code tham khảo:
#include
#include
using namespace std;
int main() {
freopen("PTBN.INP","r",stdin);
freopen("PTBN.OUT","w",stdout);
int a, b;
cin >> a >> b;
if (a == 0)
if (b == 0) cout << "Multiple";
else cout << "None";
else cout << (float)-b / a;
return 0;
}
Bài 8. Nhập a, b, c nguyên. Giải và biện luận phương trình ax2 + bx + c = 0.
Ví dụ:
PTBH.INP
1 -3 2

PTBH.OUT
12

Code tham khảo:
#include
#include
using namespace std;
int main() {
freopen("PTBH.INP","r",stdin);
freopen("PTBH.OUT","w",stdout);
int a, b, c, d;
cin >> a >> b >> c;
d = b*b - 4*a*c;
if (d < 0) cout << "Vo nghiem";
else if (d == 0) {
double x = -b / (2*a);
cout << x;
}
else {
double x1 = (-b - sqrt(d))/(2*a);
double x2 = (-b + sqrt(d))/(2*a);

cout << x1 << " " << x2;
}
return 0;
}
Bài 9. Nhập số thực x. Tìm số nguyên a lớn nhất và b nhỏ nhất sao cho a <
x < b. Ví dụ:
SOTHUC.INP
3.14

SOTHUC.OUT
34

Code tham khảo:
#include
#include
using namespace std;
int main() {
freopen("SOTHUC.INP","r",stdin);
freopen("SOTHUC.OUT","w",stdout);
float a;
cin >> a;
cout << (int)a << " " << (int)a + 1;
return 0;
}
Bài 10. Nhập 2 số nguyên dương a, b. Nếu a là số chẵn thì giảm a đi một
nửa và tăng b gấp đôi. Ngược lại, nếu a là số lẻ thì tăng a một đơn vị và tăng b
thêm một lượng là a. Ví dụ:
TANGGIAM.INP
45

TANGGIAM.OUT
2 10

Code tham khảo:
#include
#include
using namespace std;
int main() {
freopen("TANGGIAM.INP","r",stdin);
freopen("TANGGIAM.OUT","w",stdout);
int a, b;
cin >> a >> b;
if (a % 2 == 0) {
a = a / 2;
b = b * 2;
}
else {
b += a;
a += 1;
}
cout << a << " " << b;

return 0;
}
Bài 11. Tìm chữ số lớn nhất trong số nguyên có 3 chữ số. Ví dụ:
MAX.INP
486

MAX.OUT
8

Code tham khảo:
#include
#include
using namespace std;
int main() {
freopen("MAX.INP","r",stdin);
freopen("MAX.OUT","w",stdout);
int n;
cin >> n;
int a = n % 10;
n /= 10;
int b = n % 10;
n /= 10;
int c = n;
int max = a;
if(max < b) max = b;
if(max < c) max = c;
cout << max;
return 0;
}
Bài 12. Cho số nguyên dương n là số có 3 chữ số. Nam thực hiện xóa đi 1 chữ
số trong 3 chữ số của n để thu được số n mới là số có 2 chữ số. Hãy tìm số n lớn
nhất có thể. Ví dụ:
MAX.INP
486

MAX.OUT
86

Code tham khảo:
#include
#include
using namespace std;
int main() {
freopen("MAX.INP","r",stdin);
freopen("MAX.OUT","w",stdout);
int n;
cin >> n;
int a = n % 10;
n /= 10;
int b = n % 10;
n /= 10;

int c = n;
int a1 = 10*a
int a2 = 10*a
int a3 = 10*b
int a4 = 10*b
int a5 = 10*c
int a6 = 10*c
int max = a1;
if (max < a2)
if (max < a3)
if (max < a4)
if (max < a5)
if (max < a6)
cout << max;
return 0;

+
+
+
+
+
+

b;
c;
a;
c;
a;
b;

max
max
max
max
max

=
=
=
=
=

a2;
a3;
a4;
a5;
a6;

}
Bài 13. Dung có a đồng muốn đổi tiền gồm các tờ mệnh giá 50, 20 và 10. Hỏi
Dung có thể đổi tiền được không? Nếu có ghi ra số tờ tiền ít nhất Dung có được,
nếu không đổi được thì ghi ra -1. Ví dụ:
TIEN.INP
440

TIEN.OUT
1

Code tham khảo:
#include
#include
using namespace std;
int main() {
freopen("TIEN.INP","r",stdin);
freopen("TIEN.OUT","w",stdout);
int a;
cin >> a;
a %= 50;
a %= 20;
a %= 10;
if (a == 0) cout << 1;
else cout << -1;
return 0;
}
Bài 14. Thảo ghi lên bảng 4 số nguyên bất kì. Sau đó Thảo muốn biết trong
4 số trên, có số nào là số trung bình cộng hay không? Nếu có ghi ra 1 ngược lại
ghi ra -1. Biết số trung bình cộng bằng tổng 4 số đó chia cho 4.
Ví dụ:
NUMBER.INP
4678

NUMBER.OUT
-1

Code tham khảo:
#include
#include
using namespace std;
int main() {
freopen("NUMBER.INP","r",stdin);
freopen("NUMBER.OUT","w",stdout);
int a, b, c, d;
cin >> a >> b >> c >> d;
float tb = (float)(a+b+c+d)/4;
if(tb==a || tb==b || tb==c || tb==d)
cout << 1;
else cout << -1;
return 0;
}
Bài 15. Cho số n nguyên dương là số có 3 chữ số. Dũng muốn biết 3 chữ số
của số n có là độ dài ba cạnh của một tam giác hay không? Nếu có ghi ra diện
tích của tam giác đó. Nếu không ghi ra -1. Ví dụ:
TAMGIAC.INP
345

TAMGIAC.OUT
6

Code tham khảo:
#include
#include
using namespace std;
int main() {
freopen("TAMGIAC.INP","r",stdin);
freopen("TAMGIAC.OUT","w",stdout);
int a, b, c;
cin >> a >> b >> c;
if (a+b>c && a+c>b && b+c>a) {
float p = (float) (a+b+c) / 2;
cout << sqrt(p*(p-a)*(p-b)*(p-c));
}
else cout << -1;
return 0;
}

8. Vòng lặp
Gồm 3 loại vòng lặp: for, while và do… while

a) Vòng lặp for
Cú pháp:

for (bien; dieu_kien; tang_giam)
cac_lenh;
}

{

b) Vòng lặp while
Thực hiện lặp đi lặp lại một lệnh mục tiêu đến khi nào điều kiện đã cho còn
là đúng.
Cú pháp:

while(dieu_kien) {
cac_lenh;
}
c) Vòng lặp do… while
Tương tự vòng lặp while, khác ở chỗ nó sẽ kiểm tra điều kiện ở cuối vòng
lặp. Đảm bảo vòng lặp được thực hiện ít nhất 1 lần
Cú pháp:

do {
cac_lenh;
}
while(dieu_kien);
Xét một ví dụ đơn giản về 3 loại vòng lặp:
#include
using namespace std;
int main() {
int i;
for (i=1; i <= 10; i++) {
cout << i << " ";
}
i = 1; cout << endl;
while(i <= 10) {
cout << i << " ";
i++;
}
i = 1; cout << endl;
do {
cout << i << " ";
i++;
}
while(i <= 10);
return 0;
}
Bài tập
Bài 1. Liệt kê các số nguyên dương nhỏ hơn hoặc bằng n. Ví dụ:
LIETKE.INP
6

LIETKE.OUT
123456

Code tham khảo:
#include
using namespace std;
int main () {
freopen("LIETKE.INP","r",stdin);
freopen("LIETKE.OUT","w",stdout);
int n;
cin >> n;
for (int i=1; i<=n; i++) {
cout << i << " ";
if (i%10==0) cout << endl;
}
return 0;
}
Bài 2. Nhập số nguyên dương n. Liệt kê các số chia hết cho 5 nhỏ hơn hoặc
bằng n. Ví dụ:
LIETKE.INP
26

LIETKE.OUT
5 10 15 20 25

Code tham khảo:
#include
using namespace std;
int main () {
freopen("LIETKE.INP","r",stdin);
freopen("LIETKE.OUT","w",stdout);
int n;
cin >> n;
for (int i=1; i<=n; i++) {
if(i % 5==0) cout << i << " ";
if (i % 50==0) cout << endl;
}
return 0;
}
Bài 3. Nhập số nguyên dương n. Liệt kê các số chia hết cho 3 nhưng không
chia hết cho 5 nhỏ hơn hoặc bằng n. Ví dụ:
LIETKE.INP
25

LIETKE.OUT
3 6 9 12 18 21 24

Code tham khảo:
#include
using namespace std;
int main () {
freopen("LIETKE.INP","r",stdin);
freopen("LIETKE.OUT","w",stdout);
int n;
cin >> n;

for (int i=1; i<=n; i++) {
if(i%5!=0 && i%3==0) cout << i << " ";
if (i%36==0) cout << endl;
}
return 0;
}
Bài 4. Cho số nguyên dương n. Tính tổng 1 + 2 + 3 + … + n. Ví dụ:
TONG.INP
10

TONG.OUT
55

Code tham khảo:
#include
using namespace std;
int main () {
freopen("TONG.INP","r",stdin);
freopen("TONG.OUT","w",stdout);
int n;
cin >> n;
int tong = 0;
for (int i=1; i<=n; i++) {
tong += i;
}
cout << tong;
return 0;
}
Bài 5. Cho số nguyên dương n. Tính tổng 2022 + 2 + 4 + 6 + … + 2n. Ví dụ:
TONG.INP
20

TONG.OUT
2442

Code tham khảo:
#include
using namespace std;
int main () {
freopen("TONG.INP","r",stdin);
freopen("TONG.OUT","w",stdout);
int n;
cin >> n;
int tong = 2022;
for (int i=1; i<=2*n; i++) {
if (i%2 == 0) tong += i;
}
cout << tong;
return 0;
}
Bài 6. Cho số nguyên dương n. Tính tổng 1 + 3 + 5 +… + (2n-1) . Ví dụ:

TONG.INP
50

TONG.OUT
2500

Code tham khảo:
#include
using namespace std;
int main () {
freopen("TONG.INP","r",stdin);
freopen("TONG.OUT","w",stdout);
int n;
cin >> n;
int tong = 0;
for (int i=1; i<=(2*n-1); i+=2) {
tong += i;
}
cout << tong;
return 0;
}
Bài 7. Nhập n. Liệt kê và tính tổng các ước nguyên dương của n. Ví dụ:
UND.INP
24

UND.OUT
1 2 3 4 6 8 12 24
60

Code tham khảo:
#include
using namespace std;
int main () {
freopen("UND.INP","r",stdin);
freopen("UND.OUT","w",stdout);
int n;
cin >> n;
int tong = 0;
for (int i = 1; i <= n; i++) {
if (n % i == 0) {
tong += i;
cout << i << " ";
}
}
cout << endl << tong;
return 0;
}
Bài 8. Nhập số n, kiểm tra xem n có là số nguyên tố hay không? Nếu là
nguyên tố ghi 1, ngược lại ghi -1. Ví dụ:
NGUYENTO.INP
17

NGUYENTO.OUT
1

Code tham khảo:
#include
#include
using namespace std;
int nguyenTo(int n) {
if (n < 2) return 0;
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) return 0;
}
return 1;
}
int main() {
freopen("NGUYENTO.INP","r",stdin);
freopen("NGUYENTO.OUT","w",stdout);
int n;
cin >> n;
if (nguyenTo(n)) cout << 1;
else cout << -1;
return 0;
}
Bài 9. Nhập số n, li
 
Gửi ý kiến