Tải bản đầy đủ (.pdf) (49 trang)

BÀI GIẢNG THỰC HÀNH DEMO hệ THỐNG

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.57 MB, 49 trang )

TRƯỜNG ĐẠI HỌC DUY TÂN
KHOA CÔNG NGHỆ THÔNG TIN

BÀI GIẢNG THỰC HÀNH

Đà Nẵng, tháng 08 năm 2016


DEMO HE THONG

CHƯƠNG I
Bài tập 1.1: (STAMGIAC) Viết chương trình nhập vào độ dài hai cạnh của tam giác và
góc giữa hai cạnh đó, sau đó tính và in ra màn hình diện tích của tam giác.
Input: a, b và theta (theo độ)
Output: S là diện tích tam giác, làm tròn đến 2 chữ số thập phân
Ví dụ:
INPUT

OUTPUT

3 4 90

6.00

Ý tưởng:
Công thức tính diện tích tam giác: S =
kẹp giữa 2 cạnh a và b.

1
a.b. sin( ) với a,b là độ dài 2 cạnh và  là góc
2



Bài tập 1.2: (CANBACN) Viết chương trình tính

n

x , x>0.

Input: x và n
Output: S căn bậc n của x, làm tròn đến 2 chữ số thập phân
Ví dụ:
INPUT
9 2

OUTPUT
3.00

Ý tưởng:
1

Ta có:

n

1

x = xn = en

ln x

Bài tập 1.3: (SWAP) Viết chương trình nhập vào 2 số nguyên a, b. Sau đó hoán đổi

giá trị của 2 số đó:
a/ Cho phép dùng biến trung gian.
b/ Không được phép dùng biến trung gian.
Input: a, b
Output: b, a
Ví dụ:
INPUT
3 5

OUTPUT
5 3

Bài tập 1.4: (HERONG) Viết chương trình tính siện tích tam giác theo công thức sau:
S=

p( p  a)( p  b)( p  c) với p =

1
(a+b+c)
2

Input: Các số thực a, b và c
Output: S là diện tích tam giác, làm tròn đến 2 chữ số thập phân
DEMO SYSTEM

2


DEMO HE THONG
Ví dụ:

INPUT
3 4 5

OUTPUT
6.00

Bài tập 1.5: (HINHHOP) Biết diện tích 3 mặt của một hình hộp chữ nhật: S1, S2 và
S3. Viết chương trình tính tổng chu vi 3 mặt của hình hộp chữ nhật.
Input: Các số nguyên S1, S2, S3
Output: Tổng chu vi T
Ví dụ:
INPUT
1 1 1

OUTPUT
12

Bài tập 1.6: (LOWER) Đổi chữ cái in hoa ra chữ cái thường tương ứng.
Input: Chữ cái hoa
Output: Chữ cái thường tương ứng
Ví dụ:
INPUT
A

OUTPUT
a

Bài tập 1.7: (UPPER) Đổi chữ cái thường ra chữ cái in hoa tương ứng.
Input: Chữ cái thường
Output: Chữ cái in hoa tương ứng

Ví dụ:
INPUT
a

OUTPUT
A

Bài tập 1.8: (BEHIND) Cho chữ cái hoa A và số nguyên dương N≤10. In ra chữ cái
hoa đứng sau chữ cái A N đơn vị (chú ý: các chữ cái xếp theo vòng tròn, vì vậy nếu A
= ‘Z’ và N = 1 thì đáp án là ‘A’).
Input: Chữ cái hoa A và số nguyên dương N
Output: Chữ cái thỏa mãn đề bài.
Ví dụ:
INPUT
B1

OUTPUT
C

Bài tập 1.9: (SUMQR) Cho hai số nguyên dương n,k ≤ 1018. Gọi n = q*k + r. Tính
tổng q+r.
Input: n, k
Output: q+r
Ví dụ:
DEMO SYSTEM

3


DEMO HE THONG

INPUT
53

OUTPUT
3

Bài tập 1.10: (CVTRON) Cho đường tròn bán kính R ≤ 106. Tính chu vi hình tròn (làm
tròn đến hai chữ số thập phân).
Input: R
Output: T là chu vi
Ví dụ:
INPUT
3

OUTPUT
18.85

Bài tập 1.11: (DISTANCE) Cho 2 điểm A(x1,y1) và B(x2,y2). Tính khoảng cách giữa
A và B (làm tròn đến hai chữ số thập phân).
Input: x1, y1, x2, y2 ≤ 106
Output: D là khoảng cách
Ví dụ:
INPUT
0001

OUTPUT
1.00

Bài tập 1.12: (VECTOR) Cho vector 𝑎⃗ =(a1,a2). Tính modul của vector theo công thức
sau a  a12  a22 (làm tròn đến hai chữ số thập phân).

Input: a1, a2 ≤ 106
Output: S là modul của vector
Ví dụ:
INPUT
01

OUTPUT
1.00

Bài tập 1.13: (SCALAR) Cho 2 vector 𝑎⃗ =(a1,a2) và 𝑏⃗⃗ =(b1,b2). Tính tích vô hướng
của hai vector (làm tròn đến hai chữ số thập phân).
Input: a1, a2, b1, b2 ≤ 106
Output: S là tích vô hướng
Ví dụ:
INPUT
1001

OUTPUT
0.00




Bài tập 1.14: (COSVEC) Cho 2 vector 𝑎⃗ =(a1,a2) và 𝑏⃗⃗ =(b1,b2). Tính Cos( a , b ) (làm
tròn đến hai chữ số thập phân).
Input: a1, a2, b1,b2 ≤ 106





Output: C là Cos( a , b )
DEMO SYSTEM

4


DEMO HE THONG
Ví dụ:
INPUT
0110

OUTPUT
0.00

Bài tập 1.15: (MIDPOINT) Cho 2 điểm A(x1,y1) và B(x2,y2). Tìm tọa độ trung điểm
M của AB (làm tròn đến hai chữ số thập phân).
Input: x1, y1, x2, y2 ≤ 106
Output: x, y là tọa độ của điểm M
Ví dụ:
INPUT
0022

OUTPUT
1.00 1.00

Bài tập 1.16: (LINEAR) Phương trình tổng quát của đường thẳng có dạng Ax + By +
C = 0 (A và B không đồng thời bằng 0). Cho 2 điểm P(x1,y1) và Q(x2,y2). Tìm
phương trình đường thẳng qua PQ (làm tròn đến hai chữ số thập phân).
Input: x1 y1 x2 y2 ≤ 106
Output: A, B, C là các hệ số của phương trình đường thẳng.

Ví dụ:
INPUT
0111

OUTPUT
0.00 1.00 -1.00

Bài tập 1.17: (PTOLINE) Cho đường thẳng : Ax + By + C = 0 và điểm M(x0;y0).
Tính khoảng cách từ M đến đường thẳng  (làm tròn đến hai chữ số thập phân).
Input: A, B, C, x0, y0 ≤ 106
Output: D là khoảng cách
Ví dụ:
INPUT
0 1 -1 0 0

OUTPUT
1.00

Bài tập 1.18: (ANGLE) Cho hai đường thẳng D1: A1x + B1y + C1 = 0 và D2: A2x + B2y
+ C2 = 0. Tính cos(D1,D2) (làm tròn đến hai chữ số thập phân).
Input: A1, B1, C1, A2, B2, C2 ≤ 106
Output: cos(D1,D2)
Ví dụ:
INPUT
0 1 -1 1 0 -1

OUTPUT
0.00

Gợi ý:

cos  

DEMO SYSTEM

A1 A2  B1 B2
A  B12 . A2 2  B22
2
1

5


DEMO HE THONG
Bài tập 1.19: (TAMDTRON) Cho 3 điểm A(x1,y1), B(x2,y2) và C(x3,y3). Tìm tọa độ
tâm đường tròn ngoại tiếp tam giác ABC (làm tròn đến hai chữ số thập phân).
Input: x1, y1, x2, y2, x3, y3 ≤ 106
Output: x, y là tọa độ tâm của đường tròn
Ví dụ:
INPUT
000220

OUTPUT
1.00 1.00

Bài tập 1.20: (MAXIMA) Cho số nguyên dương n ≤ 106. Tách n thành 2 số a, b sao
cho tích P=a*b2 đạt cực đại.
Input: n ≤ 106
Output: a, b
Ví dụ:
INPUT

6

OUTPUT
24

Gợi ý:
Gọi x là số thứ hai thì số thứ nhất là: (n-x). Theo đề ta có: P(x) = x2.(n-x).
Hàm P đạt cực đại khi P’(x) = -3x2 + 2nx = 0  x = 2n/3.

DEMO SYSTEM

6


DEMO HE THONG

CHƯƠNG 2: CÁC CẤU TRÚC ĐIỀU KHIỂN
Bài tập 2.1: (MAXMIN) Viết chương trình tìm số lớn nhất và bé nhất của bốn số
nguyên : a, b, c, d (a, b, c, d ≤ 1018).
Input: a, b, c, d
Output: Max, Min
Ví dụ:
INPUT
1423

OUTPUT
41

Bài tập 2.2: (DATE) Viết chương trình nhập vào ngày, tháng, năm. Máy sẽ hiện lên
ngày, tháng, năm hôm sau.

Input: ngày, tháng, năm
Output: ngày, tháng, năm hôm sau
Ví dụ:
INPUT
15 5 2016

OUTPUT
16 5 2016

Gợi ý:
Biện luận theo tháng. Gom tháng thành 3 nhóm: tháng có 31 ngày (1,3,5,7,8,10,12),
tháng có 30 ngày (4,6,9,11) và tháng 2 (có 28 hoặc 29 ngày tùy theo năm nhuận).
Dùng lệnh lựa chọn:
switch (thang)
{
case 1,3,5,7,8,10,12: ..........
case 4,6,9,11: .....................
case 2: ................................
}
Bài tập 2.3: (NTFS) (Olympic 2009, khối Cao đẳng)
Trong hệ thống NTFS, bộ nhớ phân phối cho các file theo đơn vị cluster, mỗi cluster là
4KB (tức là 4096 byte). Như vậy dù file của bạn có kích thước là 1 byte nó vẫn chiếm
bộ nhớ 4KB trên đĩa.
Yêu cầu: Cho số nguyên dương n là kích thước của file trong đơn vị byte. Hãy xác
định số KB mà file đó chiếm trên đĩa trong hệ thống NTFS.
Input: Số nguyên n (0 < n ≤ 109).
Output: Một số nguyên là số KB mà file đó chiếm trên đĩa trong hệ thống NTFS.
Ví dụ:

DEMO SYSTEM


7


DEMO HE THONG
INPUT
4097

OUTPUT
8

Bài tập 2.4: (TIME) (Olympic 2010, khối Cao đẳng)
Bảng của đồng hồ điện tử gồm một dãy ba số h, p và s thể hiện tương ứng giờ, phút và
giây của thời điểm hiện tại. Cứ sau mỗi giây giá trị của bộ ba số h, p và s này sẽ thay
đổi thành ba số h1, p1 và s1 tương ứng với thời điểm mới.
Yêu cầu: Cho ba số h, p và s, hãy tìm ba số h1, p1 và s1.
Input: Ba số nguyên không âm h, p và s (0 ≤ h ≤ 23, 0 ≤ p, s ≤ 59).
Output: Ba số nguyên h1, p1 và s1 tìm được.
Ví dụ:
INPUT
8 30 0

OUTPUT
8 30 1

Bài tập 2.5: (SONGSONG) Cho 2 đoạn thẳng AB và CD với các đỉnh A(x1,y1),
B(x2,y2), C(x3,y3) và D(x4,y4) không trùng nhau. Hãy cho biết AB có song song với
CD?
Input: Tọa độ 4 điểm A(x1,y1), B(x2,y2), C(x3,y3) và D(x4,y4) mỗi điểm trên 1 dòng
Output: TRUE/FALSE tương ứng với tích chất song song hoặc không.

Ví dụ:
INPUT

OUTPUT

0 0
TRUE
1 1
1 0
2 1
Bài tập 2.6: (VUONGGOC) Cho 2 đoạn thẳng AB và CD với các đỉnh A(x1,y1),
B(x2,y2), C(x3,y3) và D(x4,y4) không trùng nhau. Hãy cho biết AB có vuông góc với
CD?
Input: Tọa độ 4 điểm A(x1,y1), B(x2,y2), C(x3,y3) và D(x4,y4) mỗi điểm trên 1 dòng
Output: TRUE/FALSE tương ứng với tích chất vuông góc hoặc không.
Ví dụ:
INPUT
0
1
1
0

0
1
0
1

OUTPUT
TRUE


Bài tập 2.7: (THREEPNT) Cho 3 điểm A(x1,y1), B(x2,y2), C(x3,y3) không trùng
nhau. Hãy cho biết A, B, C có thẳng hàng?
Input: Tọa độ 3 điểm A(x1,y1), B(x2,y2), C(x3,y3) mỗi điểm trên 1 dòng
Output: TRUE/FALSE tương ứng với tích chất thẳng hàng hoặc không.
DEMO SYSTEM

8


DEMO HE THONG
Ví dụ:
INPUT
0 0
1 1
2 2

OUTPUT
TRUE

Bài tập 2.8: (TRICHECK) Cho 3 đoạn thẳng có độ dài 0 ≤ a,b,c <106. Hãy cho biết các
đoạn a,b,c có thể ghép thành một tam giác?
Input: a, b, c
Output: TRUE/FALSE tương ứng với việc ghép được hoặc không.
Ví dụ:
INPUT
345

OUTPUT
TRUE


Bài tập 2.9: (ANGLE) Cho 3 điểm A(x1,y1), B(x2,y2), C(x3,y3) không trùng nhau.
̂ là góc nhọn, vuông hay góc tù?
Hãy cho biết góc 𝐵𝐴𝐶
Input: Tọa độ 3 điểm A(x1,y1), B(x2,y2), C(x3,y3) mỗi điểm trên 1 dòng
Output: 1/2/3 tương ứng với góc nhọn/vuông/tù.
Ví dụ:
INPUT
0 0
1 1
2 0

OUTPUT
2

Bài tập 2.10: (CIRCHECK) Cho đường tròn tâm O(xc,yc) bán kính R và điểm P(x,y).
Hãy cho biết điểm P ở trong/trên/ngoài đường tròn?
Input: xc, yc, R <106
Output: 1/2/3 tương ứng với vị trí của P.
Ví dụ:
INPUT
0 0 1 2 2

OUTPUT
3

Bài tập 2.11: Viết chương trình tính các tổng sau, làm tròn đến 2 chữ số thập phân:
(FACT) S0 = n! = 1*2*...*n

{n<23}


Ví dụ:
INPUT
3

OUTPUT
6

S1 = 1 + 1/2 + ... + 1/n
Ví dụ:
INPUT
DEMO SYSTEM

OUTPUT

9


DEMO HE THONG
2

1.50

S2 = 1 + 1/2! + ... + 1/n!
Ví dụ:
INPUT
2

OUTPUT
1.50


S3 = 1 + x + x2/2! + x3/3! + ... + xn/n!
Ví dụ:
INPUT
12

OUTPUT
2.50

S4 = 1 - x + x2/2! - x3/3! + ... + (-1)nxn/n!
Ví dụ:
INPUT
12

OUTPUT
0.50

Bài tập 2.12: (TONGCHAN) Viết chương trình nhập vào N số nguyên từ bàn phím.
Hãy tính và in ra màn hình tổng của các số chẵn vừa được nhập vào (các số nhập vào <
106).
Input: n, a1,…,an
Output: S là tổng các số chẵn.
Ví dụ:
INPUT
5
12345

OUTPUT
6

Bài tập 2.13: (DEMLE) Viết chương trình nhập vào các số nguyên cho đến khi nào

gặp số 0 thì kết thúc. Hãy đếm xem có bao nhiêu số lẻ vừa được nhập vào (các số nhập
vào < 106).
Input: Nhập a cho đến khi a=0 thì dừng
Output: S là tổng các số lẻ.
Ví dụ:
INPUT
123450

OUTPUT
3

Bài tập 2.14: (LISTUS) Viết chương trình nhập vào số nguyên N < 106. In ra màn hình
tất cả các ước số của N.
Input: n
Output: u1,…,un là các ước của n.
Ví dụ:
INPUT
6

OUTPUT
1236

Ý tưởng:
DEMO SYSTEM

10


DEMO HE THONG
Cho biến i chạy từ 1 tới N. Nếu N MOD i=0 thì viết i ra màn hình.

Bài tập 2.15: (UOCBOI) Viết chương trình tìm USCLN và BSCNN của 2 số a, b được
nhập vào từ bàn phím (a,b < 106).
Input: a, b
Output: USCLN và BSCNN.
Ví dụ:
INPUT
20 12

OUTPUT
4 60

Ý tưởng:
- Tìm USCLN: Lấy số lớn trừ số nhỏ cho đến khi a=b thì dừng. Lúc đó: USCLN=a.
- BSCNN(a,b) = a*b DIV USCLN(a,b).
Bài tập 2.16: (PRIME) Viết chương trình nhập vào số tự nhiên N < 10 6 rồi thông báo
lên màn hình số đó có phải là số nguyên tố hay không (TRUE: là số nguyên tố,
FALSE: không phải).
Input: N
Output: TRUE/FALSE tương ứng với N có phải là số nguyên tố?
Ví dụ:
INPUT
OUTPUT
5
TRUE
Ý tưởng:
N là số nguyên tố nếu N không có ước số nào từ 2  √𝑵. Từ định nghĩa này ta đưa
ra giải thuật:
- Đếm số ước số của N từ 2  √𝑵 lưu vào biến d.
- Nếu d=0 thì N là số nguyên tố.
Bài tập 2.17: (PERFECT) Số hoàn thiện là số tự nhiên có tổng các ước của nó (không

kể chính nó) bằng chính nó. Viết chương trình kiểm tra số nguyên dương N < 10 6 được
nhập vào từ bàn phím có phải là số hoàn thiện hay không? Ví dụ: 6, 28 là các số hoàn
thiện. (TRUE: là số hoàn thiện, FALSE: không phải).
Input: N
Output: TRUE/FALSE tương ứng với N có phải là số hoàn thiện?
Ví dụ:
INPUT
OUTPUT
6
TRUE
Bài tập 2.18: (COUNTSUM) Viết chương trình nhập vào số tự nhiên N < 10 18 rồi
thông báo lên màn hình số đó có bao nhiêu chữ số và tổng của các chữ số của N.
Input: N
Output: D và S là số chữ số và tổng các chữ số của N.
DEMO SYSTEM

11


DEMO HE THONG
Ví dụ:
INPUT
2016

OUTPUT
49

Bài tập 2.19: (GATHO) Viết chương trình để tìm lời giải cho bài toán sau:
Trong giỏ vừa thỏ vừa gà,
Một trăm cái cẳng, bốn ba cái đầu.

Hỏi có mấy gà, mấy thỏ?

Input: hai số nguyên dương m và n là tổng số đầu gà+thỏ và tổng số chân
gà+thỏ (0 ≤ m, n ≤ 106).
Output: x và y là số lượng gà và thỏ. Nếu không có đáp án thì OUTPUT -1.
Ví dụ:
INPUT
OUTPUT
43 100
36 7
INPUT

OUTPUT

10 7

-1

Bài tập 2.20: (CONGDON) Viết chương trình nhập vào các số nguyên từ bàn phím
cho đến khi nào gặp số nguyên tố thì kết thúc nhập (các số nhập vào < 10 6). Tính tổng
các số chẵn vừa được nhập vào.
Input: Nhập a cho đến khi a là số nguyên tố thì dừng
Output: S là tổng các số chẵn.
Ví dụ:
INPUT
OUTPUT
4 6 9 10 5
20
Bài tập 2.21: (PRIMEFACT) Viết chương trình phân tích một số nguyên dương N <
106 ra thừa số nguyên tố.

Input: N
Output: f1,f2,...,fn là các thừa số nguyên tố
Ví dụ:
INPUT
OUTPUT
100
2255
Bài tập 2.22: (LASTZERO) Cho số nguyên dương N < 106. Cho biết N! kết thúc bằng
mấy số 0?
Input: N
Output: D là số lượng số 0 cuối N!
Ví dụ:
INPUT
OUTPUT
10

DEMO SYSTEM

2

12


DEMO HE THONG
Bài tập 2.23: (AMDUONG) Cho số nguyên N < 109. Tìm số Q dương nhỏ nhất sao
cho tích các chữ số của Q bằng N. In ra -1 nếu không tìm thấy kết quả.
Input: N
Output: Q
Ví dụ:
INPUT

OUTPUT
10

25

INPUT
11

OUTPUT
-1

Bài tập 2.24: (FLOWER) Thầy Phương muốn mua một đóa hoa thật đẹp để tặng Khoa
Tin học nhân ngày 20/11 trong phạm vi số tiền mà thầy Phương có. Thầy Phương có c
đồng, ở chợ có bán 2 loại hoa: hoa Hồng với giá a đồng một nhánh, hoa Cúc với giá b
đồng một nhánh. Thầy Phương muốn mua được càng nhiều hoa càng tốt với giá trị
của đóa hoa phải là lớn nhất (dĩ nhiên, không vượt quá số tiền hiện có của Thầy).
Các em hãy giúp thầy Phương mua được đóa hoa có giá trị lớn nhất.
Yêu cầu: Cho 3 số nguyên a, b, c (1 ≤ a , b ≤ 104, 0 ≤ c ≤ 106). Hãy xác định giá trị
của bó hoa mua được.
Input: một dòng chứa 3 số nguyên dương a, b và c.
Output: một số nguyên là giá trị của đóa hoa mua được.
Ví dụ:
INPUT
2 3 11

OUTPUT
11

Bài tập 2.25: (SNAIL) Con ốc sên đang ở gốc của một cái cây cao v mét tính từ gốc.
Ốc sên muốn bò lên ngọn cây để ăn những lá non trên đó. Ban ngày ốc sên bò được a

mét lên trên, nhưng ban đêm, khi ngủ nó bị trôi xuống dưới b mét.
Yêu cầu: Cho các số nguyên v, a và b (1 ≤ b < a ≤ v ≤ 109). Hãy xác định số ngày cần thiết
để ốc sên lên tới ngọn cây.
Input: Ba số nguyên a, b và v.
Output: Đưa ra một số nguyên – kết quả tìm được.
Ví dụ:

INPUT
215

OUTPUT
4

Bài tập 2.26: (SPECNUM) Một số nguyên dương N được gọi là số đặc biệt nếu tổng
các chữ số lẻ của N bằng tổng các chữ số chẵn của N.
Ví dụ: 1289, 134 là các số đặc biệt.
Yêu cầu: Cho hai số nguyên dương A và B, hãy đếm số lượng các số đặc biệt từ A tới
B.
Input: gồm 1 dòng chứa hai số nguyên dương A và B (102 ≤ ADEMO SYSTEM

13


DEMO HE THONG
Output: một số nguyên K là số lượng các số đặc biệt.
Ví dụ:
INPUT
100 150


OUTPUT
4

Bài tập 2.27: (CIRCLE) Một đường tròn đường kính 2N-1 đơn vị được vẽ giữa bàn cờ
2N*2N. Với N=3 được minh hoạ như hình dưới đây:

Yêu cầu: Hãy xác định số ô vuông nằm hoàn toàn trong hình tròn.
Input:
 Dòng đầu tiên là số T (1 ≤ T ≤ 104), với T là số bộ test
 Mỗi dòng tiếp theo là một số nguyên dương không lớn hơn 150 là các giá trị
của N.
Output:
 Với mỗi giá trị vào n, kết quả ra phải tính được số ô vuông nằm hoàn toàn trong
hình tròn, mỗi số trên một dòng.
Ví dụ:
INPUT
2
3
4

OUTPUT
12
24

Bài tập 2.28: (DIGITCNT) (ACM VietNam 2011)
Cho một số nguyên N (1 ≤ N ≤ 109).
Yêu cầu: Hãy đếm số chữ số khác không mà N chia hết chữ số đó. Ví dụ: N = 1359, N
chia hết cho 1, 3 và 9. Vậy kết quả là 3.
Input:
 Dòng đầu tiên là số T (1 ≤ T ≤ 104), với T là số bộ test

 Mỗi dòng tiếp theo là một số nguyên N.
DEMO SYSTEM

14


DEMO HE THONG
Output:
 Với mỗi giá trị vào N, kết quả ra phải tính được số chữ số mà N chia hết, mỗi
số trên một dòng.
Ví dụ:
INPUT
3
1359
3520
33399

OUTPUT
3
2
5

Bài tập 2.29: (PRIMEPOW)
Cho một số nguyên n ≤ 109 và số nguyên tố p. Tìm bậc của p trong n!
Ví dụ: 10! = 28.34.52.7 thì PRIMEPOW(2,10) = 8, PRIMEPOW(7,10) = 1.
Input: n, p
Output: S là bậc của p trong n!
Ví dụ:
INPUT
10 2


OUTPUT
8

Bài tập 2.30: (LUCKY)
Mỗi người có một quan điểm riêng về may mắn. Trong lĩnh vực số học Steve coi các
số ở hệ 10 chỉ chứa các chữ số 4 và 7, tức là các số chỉ chứa toàn số 4, chứa toàn số 7
hoặc cả 4 lẫn 7 là những số may mắn. Các số may mắn được Steve đánh số theo giá trị
tăng dần của chúng, bắt đầu từ 1. Các số may mắn đầu tiên là 4, 7, 44, 47, . . .
Yêu cầu: Cho số nguyên k (1 ≤ k ≤ 106). Hãy xác định số may mắn thứ k.
Input: Số nguyên k.
Output: Đưa ra số may mắn thứ k.
Ví dụ:
INPUT
3

DEMO SYSTEM

OUTPUT
44

15


DEMO HE THONG

CHƯƠNG 3: HÀM
Bài tập 3.1: Viết hàm float Max(float x,float y) để tìm số lớn nhất của hai số thực
x,y.
Bài tập 3.2: Viết hàm float Max(float a,float b,float c) để tìm giá trị lớn nhất của 3 số

thực a, b và c.
Bài tập 3.3: Viết hàm char Lower(char c) để đổi chữ cái hoa c thành chữ thường.
Bài tập 3.4: Viết hàm bool Prime(int n) để kiểm tra số nguyên dương n có phải là số
nguyên tố hay không?
Bài tập 3.5: Viết hàm bool Perfect(int n) để kiểm tra số nguyên dương n có phải là số
hoàn thiện hay không?
Bài tập 3.6: Viết hàm void PHANTICH(int n) để phân tích số nguyên n ra thừa số
nguyên tố.
Bài tập 3.7: Viết hàm int UCLN(int a,int b) để tìm ước chung lớn nhất của hai số
nguyên dương a, b theo hai cách : đệ qui và không đệ qui.
Bài tập 3.8: Viết hàm int BCNN(int a,int b) để tìm bội chung nhỏ nhất của 2 số
nguyên dương a và b.
Bài tập 3.9: Viết hàm void Toigian(int a,int b,int &Tu,int &Mau) để tối giản phân
số a/b, với a và b là hai số nguyên. Kết quả của phân số tối giản lưu ở hai biến Tu và
Mau.
Bài tập 3.10: Viết hàm đệ quy long long CKN(int k,int n) để tính Ckn biết :
Cnn =1 , C0n = 1 , Ckn = Ck-1n-1 + Ckn-1.
Bài tập 3.11: Cho m, n nguyên dương. Viết hàm đệ quy int A(int m,int n) tính:
n 1 , m  0


A(m  1,1) , n  0
A(m,n) = 
 A(m  1, A(m, n  1)) , m  0  n  0


Bài tập 3.12: Viết hàm đệ qui int Fibo(int n) để tính số hạng thứ n của dãy Fibonaci:


F(n) = 


1 , n  1 n  2

F ( n  1)  F ( n  2) , n  2

Bài tập 3.13: Viết hàm int Daoso(int n) để tìm số đảo ngược của số nguyên dương n
theo 2 cách: đệ qui và không đệ qui.
Bài tập 3.14: Viết hàm int Demso(long long n) để đếm số chữ số của số nguyên
dương n theo 2 cách: đệ qui và không đệ qui.
Bài tập 3.15: Viết hàm bool Doixung(long long n) để kiểm tra số nguyên dương n có
phải là số đối xứng?
Bài tập 3.16: (AUTION) (Olympic Tin học 2010, khối Không chuyên)
DEMO SYSTEM

16


DEMO HE THONG
Một biển số xe được gọi là đẹp nếu nó thỏa mãn các điều kiện sau:
- Là một số nguyên dương T mà A ≤ T ≤ B trong đó A, B là hai số nguyên dương
cho trước;
- T là một số nguyên tố;
- T là một số đối xứng (đọc T từ trái qua phải thu được kết quả giống như đọc T từ
phải qua trái). Ví dụ 12321 là một số đối xứng.
Yêu cầu: Cho hai số nguyên dương A và B, hãy tìm số lượng các biển số xe đẹp.
Input: Hai số nguyên dương A và B (104≤AOutput: Một số nguyên là số lượng biển số xe đẹp tìm được.
Ví dụ:
INPUT
11111 22222


OUTPUT
23

Bài tập 3.17: (SP) (Olympic Tin học 2012, khối Không chuyên)
Nhân dịp tổ chức OLP2012, siêu thị BigC tổ chức bán bút với chương trình khuyến
mãi như sau: Giá một chiếc bút là t đồng, khi mua m chiếc khách hàng được tặng thêm
1 chiếc. Để phục vụ kỳ thi, Ban tổ chức cần phải chuẩn bị ít nhất n bút phát cho các thí
sinh dự thi.
Yêu cầu: Cho biết m, n và t. Tính số tiền S (đơn vị đồng) ít nhất cần có để mua bút.
Input: ba số nguyên dương m, n và t (m, n, t ≤ 106 )
Output: một số nguyên S.
Ví dụ:
INPUT
2 3 100

OUTPUT
200

Bài tập 3.18: (SNUM) (Olympic Tin học 2013, khối Cao đẳng)
Một số nguyên dương n được gọi là số đặc biệt nếu n chia hết cho tổng các chữ số của
n. Ví dụ, số 27 là số đặc biệt, còn hai số 11 và 2013 thì không phải là số đặc biệt.
Yêu cầu: Cho số nguyên dương n. Hãy kiểm tra xem số n có phải là số đặc biệt hay
không?
Input: Số nguyên dương n ≤ 1018.
Output: Một số nguyên C là câu trả lời, trong đó C = 1 nếu n là số đặc biệt, C = 0
trong trường hợp ngược lại.
Ví dụ:
INPUT
27


OUTPUT
1

Bài tập 3.19: (SUM) (Olympic 2014 Tin học, khối Cao đẳng)
Viết chương trình đọc vào hai số thực dương 𝑎 và 𝑏 và tính tổng tất cả các số nguyên
không nhỏ hơn 𝑎 và không lớn hơn 𝑏.
DEMO SYSTEM

17


DEMO HE THONG
Input: Hai số thực dương 𝑎, 𝑏.
Output: Một số nguyên là tổng tất cả các số nguyên không nhỏ hơn 𝑎 và không lớn
hơn 𝑏.
Ví dụ:
INPUT
0.3 2.89

OUTPUT
3

Chú ý:
- Có 50% số test có 0 < 𝑎 ≤ 𝑏 ≤ 1000;
- Có 50% số test còn lại có 0 < 𝑎 ≤ 𝑏 ≤ 109 .
Bài tập 3.20: (N3S) (Olympic Tin học 2015, khối Cao đẳng và Không chuyên)
Một số tự nhiên được gọi là số N3S nếu thỏa mãn hai điều kiện:
 Là bội của 3;
 Cộng 1 thì trở thành số chính phương.

Sắp xếp tăng dần các số N3S ta được dãy vô hạn số N3S, các số đầu tiên của dãy là: 0,
3, 15, 24, 48,…
Yêu cầu: Cho hai số nguyên dương 𝑘 và 𝑀, gọi 𝑁 là số N3S thứ 𝑘 trên dãy (các số
trên dãy được đánh thứ tự bắt đầu từ 1), tính phần dư khi chia 𝑁 cho 𝑀.
Input: có định dạng như sau:
 Dòng đầu ghi số nguyên dương 𝑇 (𝑇≤100) là số bộ dữ liệu;
 𝑇 dòng sau, mỗi dòng tương ứng với một bộ dữ liệu chứa hai số nguyên dương
𝑘, 𝑀.
Output: Gồm 𝑇 dòng tương ứng với 𝑇 bộ dữ liệu trong dữ liệu vào, mỗi dòng ghi một
số là phần dư khi chia 𝑁 cho 𝑀.
Ví dụ:
INPUT
2
2 10
5 10

DEMO SYSTEM

OUTPUT
3
8

18


DEMO HE THONG

CHƯƠNG 4: MẢNG
Bài tập 4.1: (ARRMAX) Viết chương trình tìm giá trị lớn nhất của một mảng số
nguyên gồm N phần tử.

Input:
- Dòng đầu chứa số nguyên: N
- Dòng tiếp theo chứa các phần tử a1,…,an
Output: M là số nguyên lớn nhất trong mảng
Ví dụ:
INPUT
5
1 2 30 4 5

OUTPUT
30

Bài tập 4.2: (SQRSUM) Viết chương trình tính tổng bình phương của các số âm trong
một mảng gồm N phần tử.
Input:
- Dòng đầu chứa số nguyên: N
- Dòng tiếp theo chứa các phần tử a1,…,an
Output: S là tổng bình phương các số âm trong mảng
Ví dụ:
INPUT
5
1 -2 30 -4 5

OUTPUT
20

Bài tập 4.3: (AVERAGE) Viết chương trình tính trung bình cộng của các số chẵn
trong một mảng gồm N phần tử.
Input:
- Dòng đầu chứa số nguyên: N

- Dòng tiếp theo chứa các phần tử a1,…,an
Output: T là trung bình cộng của các số chẵn trong mảng, làm tròn đến 2 chữ số thập
phân.
Ví dụ:
INPUT
5
12345

OUTPUT
3.00

Bài tập 4.4: (MERGEARR) Cho 2 mảng số nguyên đã được sắp xếp theo thứ tự tăng
dần. Hãy trộn 2 mảng đó lại thành mảng C sao cho mảng C vẫn có thứ tự tăng dần.
DEMO SYSTEM

19


DEMO HE THONG
Input:
- Dòng đầu chứa 2 số nguyên: M, N
- Dòng tiếp theo chứa các phần tử a1,…,aM tăng dần
- Dòng tiếp theo chứa các phần tử b1,…,bN tăng dần
Output:
- Dòng đầu ghi: M+N
- Dòng sau ghi: C1, C2,…, CM+N tăng dần
Ví dụ:
INPUT
53
13579

246

OUTPUT
8
12345679

Gợi ý:
- Dùng 2 chỉ số i,j để duyệt qua các phần tử của 2 mảng A, B và k là chỉ số cho
mảng C.
- Trong khi (i/*Tức trong khi cả 2 dãy A, B đều chưa duyệt hết */
+ Nếu A[i]>B[j] thì: C[k]=A[i]; i=i+1;
+ Ngược lại: C[k]=B[j]; j=j+1;
- Nếu dãy nào hết trước thì đem phần còn lại của dãy kia bổ sung vào cuối dãy C.
Bài tập 4.5: (ASCEND) Cho dãy các số nguyên gồm N phần tử. Hãy kiểm tra dãy số
đã được sắp theo thứ tự tăng dần hay chưa? (TRUE: đã sắp tăng dần, FALSE: chưa sắp
tăng).
Input:
- Dòng đầu chứa số nguyên: N
- Dòng tiếp theo chứa các phần tử a1,…,an
Output: TRUE/FALSE
Ví dụ:
INPUT
5
12345

OUTPUT
TRUE

Bài tập 4.6: (DAYTANG) Viết chương trình nhập vào một dãy số nguyên a1, a2, ..., an.

Tìm độ dài dãy con tăng dần dài nhất. (Dãy con là dãy các phần tử liên tiếp nhau trong
mảng).
Input:
- Dòng đầu chứa số nguyên: N
DEMO SYSTEM

20


DEMO HE THONG
- Dòng tiếp theo chứa các phần tử a1,…,an
Output: S là độ dài dãy con tăng dần dài nhất
Ví dụ:
INPUT

OUTPUT

10
5
9 12 2 2 3 7 8 5 10 15
Bài tập 4.7: (MATSUM) Viết chương trình tính tổng 2 ma trận vuông A, B cấp n.
Input:
- Dòng đầu: n
- n dòng tiếp theo, mỗi dòng chứa n số nguyên của ma trận A.
- n dòng tiếp theo, mỗi dòng chứa n số nguyên của ma trận B.
Output: Ma trận kết quả C
Ví dụ:
INPUT

OUTPUT


2
12
34
56
78

6 8
10 12

Gợi ý:
Công thức tính tổng 2 ma trận: Cij = Aij + Bij
Bài tập 4.8: (MATMUL) Viết chương trình tính tích 2 ma trận vuông A, B cấp n.
Input:
- Dòng đầu: n
- n dòng tiếp theo, mỗi dòng chứa n số nguyên của ma trận A.
- n dòng tiếp theo, mỗi dòng chứa n số nguyên của ma trận B.
Output: Ma trận kết quả C
Ví dụ:
INPUT

OUTPUT

2
12
34
56
78
Công thức tính tích 2 ma trận: Cij =


19 22
43 50

n

A
k 1

DEMO SYSTEM

ik

* Bkj

21


DEMO HE THONG
Bài tập 4.9: (PASCAL) Viết chương trình in ra màn hình tam giác Pascal.
Input: N
Output: Ma trận tam giác Pascal
Ví dụ:
INPUT

OUTPUT

4

1
1

1
1
1

1
2 1
3 3 1
4 6 4 1

Ý tưởng:
Tam giác Pascal được tạo ra theo qui luật sau:
+ Mỗi dòng đều bắt đầu và kết thúc bởi số 1.
+ Phần tử thứ j ở dòng i nhận được bằng cách cộng 2 phần tử thứ j-1 và j ở dòng thứ
i-1: a(i,j) = a(i-1,j-1) + a(i-1,j).
Bài tập 4.10: Viết chương trình in ra các số nguyên từ 1 đến N2 theo hình xoắn ốc với
N được nhập vào từ bàn phím. Ví dụ, với N=5 ta có:
1

2

3

4

5

16

17


18

19

6

15

24

25

20

7

14

23

22

21

8

13

12


11

10

9

Bài tập 4.11: Viết chương trình nhập vào số tự nhiên N (N lẻ), sau đó điền các số từ 1
đến n2 vào trong một bảng vuông sao cho tổng các hàng ngang, hàng dọc và 2 đường
chéo đều bằng nhau (bảng này được gọi là Ma phương).
Ví dụ: Với N=3 và N=5 ta có
2
9
4

7
5
3

6
1
8

3 16
20 8
Tây 7 25
24 12
11 4

Bắc
9

21
13
5
17
Nam

22 15
14 2
1 19 Đông
18 6
10 23

Phuơng pháp:
DEMO SYSTEM

22


DEMO HE THONG
Xuất phát từ ô bên phải của ô nằm giữa. Đi theo hướng đông bắc để điền các số 1,
2, ...
Khi điền số, cần chú ý một số nguyên tắc sau:
- Nếu vượt ra phía ngoài bên phải của bảng thì quay trở lại cột đầu tiên.
- Nếu vượt ra phía ngoài bên trên của bảng thì quay trở lại dòng cuối cùng.
- Nếu số đã điền k chia hết cho N thì số tiếp theo sẽ được viết trên cùng một hàng
với k nhưng cách 1 ô về phía bên phải.
Bài tập 4.12: (SETNUM) Cho n số nguyên dương a1, a2,..., an (1 ≤ n, ai ≤ 106). Hãy
xác định số lượng các phần tử khác nhau trong dãy số đã cho.
Input:
- Dòng đầu chứa số nguyên dương n.

- Dòng sau chứa n số nguyên a1, a2,..., an.
Output: một số nguyên S là số các phần tử khác nhau trong dãy số đã cho.
Ví dụ:
INPUT
5
41421

OUTPUT
3

Bài tập 4.13: (SUPASCEN) Dãy số nguyên dương được gọi là dãy siêu tăng nếu kể từ
phần tử thứ hai trở đi, mỗi phần tử không nhỏ hơn tổng của các phần tử đứng trước đó.
Ví dụ: a = {1, 5, 6, 15, 30} là dãy siêu tăng; b = {1, 5, 9, 10, 21} không phải là dãy
siêu tăng.
Cho dãy số nguyên dương {a} gồm n phần tử (n≤50, a<10 18). Hãy kiểm tra tính siêu
tăng của dãy a.
Input:
- Dòng đầu chứa số nguyên dương n.
- Dòng sau chứa n số nguyên a1, a2,..., an.
Output: TRUE/FALSE ứng với dãy siêu tăng.
Ví dụ:
INPUT
5
1 5 6 15 30
INPUT
5
1 5 9 10 21

OUTPUT
TRUE


OUTPUT
FALSE

Bài tập 4.14: (DEL) (Olympic Tin học 2012, khối Không Chuyên)
DEMO SYSTEM

23


DEMO HE THONG
Cho dãy số nguyên không âm a1 , a 2 , . . , a n. Người ta tiến hành chọn ra 2 chỉ số i, j sao
cho 1 ≤ i < 𝑗 ≤ 𝑛 và xóa khỏi dãy 2 số a i , a j để tổng giá trị các số còn lại trong dãy là
số chẵn.
Yêu cầu: Cho dãy số a1 , a 2 , . . , a n. Hãy đếm số lượng cách chọn 2 chỉ số i, j thỏa mãn.
Hai cách chọn khác nhau nếu tồn tại một chỉ số khác nhau.
Input:
-

Dòng 1: chứa số nguyên n (n ≤ 106 )
Dòng 2: chứa n số nguyên không âm a1 , a 2 , . . , a n (ai ≤ 109 )

Output: Một số nguyên là số cách chọn 2 chỉ số thỏa mãn.
Ví dụ:
INPUT
5
12345

OUTPUT
6


Bài tập 4.15: (FSEQ) (Olympic Tin học 2013, khối Cao đẳng)
Một dãy số gồm n số nguyên f1,f2,…,fn được gọi là dãy có tính chất của dãy số
Fibonacci nếu n≥3 và với mọi số fi (i≥3 ) thỏa mãn điều kiện fi = fi-1 + fi-2.
Ví dụ, dãy 1, 1, 2, 3, 5, 8 là dãy số có tính chất của dãy số Fibonacci; còn dãy 3, 3, 6,
9, 14, 23 không phải là dãy số có tính chất của dãy số Fibonacci.
Yêu cầu: Cho dãy số nguyên a1, a2,…,an. Hãy tìm một dãy con liên tiếp gồm nhiều
phần tử nhất của dãy số đã cho có tính chất của dãy số Fibonacci.
Input:
- Dòng đầu chứa số nguyên n (3 ≤ n ≤ 30000)
- Dòng thứ hai chứa n số nguyên a1, a2,…,an (|a i| ≤ 109).
Output: Một số nguyên là số lượng phần tử của dãy con tìm được, ghi -1 nếu không
tồn tại dãy con liên tiếp nào của dãy có tính chất của dãy số Fibonacci.
Ví dụ:
INPUT
7
1 3 3 6 9 14 23

OUTPUT
4

Bài tập 4.16: (USEQ) (Olympic Tin học 2015, khối Cao đẳng)
Người ta định nghĩa dãy số nguyên dương 𝑎1,𝑎2,…,𝑎𝑛 đồng đẳng với dãy số nguyên
dương 𝑏1,𝑏2,…,𝑏𝑛 nếu với mọi 𝑖,𝑗 (𝑖=1,2,…,𝑛;𝑗=1,2,…,𝑛) đều thỏa mãn:


Nếu 𝑎𝑖<𝑎𝑗 thì 𝑏𝑖<𝑏𝑗;




Nếu 𝑎𝑖=𝑎𝑗 thì 𝑏𝑖=𝑏𝑗;



Nếu 𝑎𝑖>𝑎𝑗 thì 𝑏𝑖>𝑏𝑗;

Yêu cầu: Cho hai dãy số nguyên dương 𝑎1,𝑎2,…,𝑎𝑛 và 𝑏1,𝑏2,…,𝑏𝑛, hãy kiểm tra xem
hai dãy có đồng đẳng hay không?
24
DEMO SYSTEM


DEMO HE THONG
Input:
-

Dòng đầu ghi số nguyên dương 𝑇 là số bộ dữ liệu;

-

𝑇 nhóm dòng sau, mỗi nhóm dòng tương ứng với một bộ dữ liệu có khuôn dạng:
o Dòng đầu của nhóm chứa số nguyên 𝑛 (n≤80);
o Dòng thứ hai gồm 𝑛 số nguyên dương 𝑎1,𝑎2,…,𝑎𝑛 (𝑎𝑖≤109);
o Dòng thứ ba gồm 𝑛 số nguyên dương 𝑏1,𝑏2,…,𝑏𝑛 (𝑏𝑖≤109);

Output: Gồm 𝑇 dòng tương ứng với 𝑇 bộ dữ liệu trong dữ liệu vào, mỗi dòng ghi
YES nếu hai dãy đồng đẳng, ghi NO nếu hai dãy không đồng đẳng.
Ví dụ:
INPUT
2

3
351
5 24 4
3
281
20 24 22

OUTPUT
YES
NO

Bài tập 4.17: (SEQUENCE) (Olympic Tin học 2009, khối Không Chuyên)
Cho dãy số gồm n số nguyên a1, a2, …, an. Tìm giá trị lớn nhất của hàm
f (i , j , k) = ai + 2×aj + 3×ak với 1 ≤ i < j < k ≤ n.
Ví dụ: với dãy gồm 5 số -1, 2, -2, -3, 5 thì f (1, 2 , 5 ) = -1+2×2+3×5=18 là lớn nhất.
Input:
-

Dòng đầu tiên chứa số nguyên n (3 ≤ n ≤ 105),

-

Dòng tiếp theo chứa n số nguyên ai (|ai| ≤ 109).

Output: Một số nguyên là giá trị lớn nhất của hàm f (i , j , k) tìm được.
Ví dụ:
INPUT
5
-1 2 -2 -3 5


OUTPUT
18

Bài tập 4.18: (CABLE) Cho N đoạn dây có độ dài L1,L2,...,LN. Yêu cầu cắt các đoạn
dây này thành K đoạn bằng nhau với độ dài lớn nhất có thể được. Nếu như không thể
nhận được K đoạn có độ dài 1, đưa ra 0.
Giới hạn : 1≤ N, K ≤10000, 100≤Li≤10000000 tất cả là số nguyên, thời gian 1 giây.
Input:
- Dòng đầu tiên chứa số hai số N và K. N
- Dòng tiếp theo-là các số L1,L2,...,LN , mỗi số trên một dòng.
Output: Một số X là độ dài của các đoạn thẳng.
DEMO SYSTEM

25