Tải bản đầy đủ (.doc) (21 trang)

Bài tập thuật toán ôn thi học sinh giỏi tin học - tài liệu thuật toán và cấu trúc dữ liệu giải thuật

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 (328.8 KB, 21 trang )

TRƯỜNG THPT SỐ 4 BỐ TRẠCH
TỔ LÝ TIN KỸ CN
BÀI TẬP TIN HỌC ĐẠI CƯƠNG
PHẦN NGÔN NGỮ LẬP TRÌNH PASCAL CƠ BẢN
DÀNH CHO ÔN THI HỌC SINH GIỎI
Giáo viên: Nguyễn Văn Tường
Bài tập biên soạn theo các phần sau:
A. NHẬP XUẤT DỮ LIỆU
B. LƯU ĐỒ - THUẬT TOÁN
C. CẤU TRÚC RẼ NHÁNH
D. CẤU TRÚC LẶP
E. HÀM - ĐỆ QUY
F. MẢNG MỘT CHIỀU
A. NHẬP XUẤT DỮ LIỆU
Viết các chương trình:
1. Tính tổng, hiệu, tích và thương của hai số nguyên dương.
Nhập a, b: 6 4
Tổng: 6 + 4 = 10
Hiệu: 6 - 4 = 2
Tích: 6 x 4 = 24
Thương: 6 / 4 = 1.50
2. Tính căn bậc 2 của một số thực.
Nhập số thực: 7
Căn bậc 2 của 7 là 2.646
3. Hiển thị mã ASCII của một kí tự.
Nhập ký tự: A
Mã ASCII của ký tự A là: 65
4. Hiển thị ký tự khi biết mã ASCII của nó.
Nhập mã ASCII của ký tự: 97
Ký tự có mã ASCII 97 là: a
5. Tính trung bình cộng của 3 số nguyên.


Nhập a, b, c: 3 4 7
Trung bình cộng của 3, 4, và 7 là: 4.67
6. Tính khoảng cách giữa 2 điểm trên mặt phẳng.
Nhập tọa độ điểm A: 2 3
Nhập tọa độ điểm B: 4 6
Khoảng cách giữa A(2,3) và B(4,6) là 3.6
7. Tính chu vi và diện tích hình tròn khi biết bán kính của nó (sử dụng : PI = 3.1416)
Nhập bán kính (theo mét): 4
Đường tròn bán kính 4m có chu vi là 25.13 met
Hình tròn bán kính 4m có diện tích là 50.27 met vuong
8. Tính chu vi và diện tích hình chữ nhật khi biết chiều dài và chiều rộng của nó.
Nhập chiều dài, chiều rộng: 4 6
Chu vi và diện tích của hình chữ nhật 4x6 lần lượt la: 20 24
BÀI TẬP TIN HỌC ĐẠI CƯƠNG | NHẬP XUẤT DỮ LIỆU
9. * Tính tổng, hiệu, tích, thương của hai phân số (tử và mẫu là các số nguyên dương).
Nhập phân số thứ 1 (tử, mẫu): 2 3
Nhập phân số thứ 2 (tử, mẫu): 3 4
2/3 cộng 3/4 =1.42
2/3 trừ 3/4 = -0.08
2/3 nhân 3/4 =0.50
2/3 chia 3/4 =0.89
B. LƯU ĐỒ - THUẬT TOÁN
Thiết kế thuật toán bằng sơ đồ khối:
1. Xác định vị trí (thuộc góc phần tư thứ mấy) của một góc.
Nhập vào một góc (theo độ): 95
Thuộc góc phần tư thứ 2
2. Xác định số ngày của một tháng nào đó trong một năm không phải năm nhuận.
Nhập vào một tháng: 10
Tháng 10 có 31 ngày!
3. Kiểm tra xem 3 số thực a, b, c có thể là độ dài 3 cạnh của một tam giác không.

Nhập vào 3 số thực:
- a = 3
- b = 4
- c = 5
Đây có thể là độ dài 3 cạnh của một tam giác.
4. Tìm ước chung lớn nhất của hai số nguyên dương.
Nhập a: 20
Nhập b: 15
UCLN(a,b): 5
5. Tính X(n) = 1 + 2 + 3 + … + n
Nhập n (n>0): 3
X(3) = 6
6. Tính Y(n) = 1 × 2 × 3 × … × n
Nhập n (n>0): 4
Y(3) = 24
7. Tính Z(n) = 2 + 4 + 6 + … + 2n
Nhập n (n>0): 3
Z(3) = 12
BÀI TẬP TIN HỌC ĐẠI CƯƠNG | LƯU ĐỒ - THUẬT TOÁN
2
10/2012
8. Tính A(n) = 1 × 3 × 5 × … × (2n+1)
Nhập n (n>0): 3
A(3) = 105
9. Tính C(n) = 1
2
+ 2
2
+ 3
2

+ … + n
2
Nhập n (n>0): 3
C(3) = 14
10. Tính B(n) = 1 - 2 + 3 - 4 + … + (-1)
n+1
n
Nhập n (n>0): 3
B(3) = 2
11. * Tính D(n) = 1 + (1+2) + (1+2+3) + … + (1+2+3+…+n), với n > 0
Nhập n (n>0): 3
D(3) = 10
12. * Tính trung bình cộng của n số thực được nhập từ bàn phím.
Nhập một số (nhập 0 để dừng): 3
Nhập một số (nhập 0 để dừng): 4
Nhập một số (nhập 0 để dừng): 5
Nhập một số (nhập 0 để dừng): 0
Trung bình cộng của 3 số thực trên là: 4
C. CẤU TRÚC RẼ NHÁNH
Viết chương trình:
1. Xác định xem một số nguyên là chẵn hay lẻ.
Nhập số nguyên n: 8
8 là một số chẵn
2. Xác định học lực dựa vào điểm trung bình của sinh viên, biết:
Điểm trung bình [0, 4) [4, 5) [5, 6.5) [6.5, 8) [8, 9) [9, 10]
Học lực Kém Yếu Trung bình Khá Giỏi Xuất sắc
Nhập điểm trung bình: 8
Học lực của sinh viên này là Giỏi
3. Xác định số có giá trị lớn hơn trong hai số thực a, b.
Nhập số thực thứ nhất: 12.3

Nhập số thực thứ hai: 3.7
Max(12.30, 3.70) = 12.30
BÀI TẬP TIN HỌC ĐẠI CƯƠNG | CẤU TRÚC RẼ NHÁNH
3
10/2012
4. Xác định số có giá trị lớn nhất và nhỏ nhất trong ba số nguyên a, b, c.
Nhập số thứ nhất: 2
Nhập số thứ hai:
5
Nhập số thứ ba: 4
Min(2, 5, 4) = 2
Max(2, 5, 4) = 5
5. Giải và biện luận phương trình bậc nhất: ax + b = 0 (a, b ).
Nhập a, b: 1.5 3
Phương trình có 1 nghiệm: x = -2
6. Giải và biện luận phương trình bậc hai: ax
2
+ bx + c = 0 (a, b, c )
Nhập a, b, c: 1 -3 2
Phương trình có 2 nghiệm phân biệt: x1 = 1, x2 = 2
7. Hiển thị một số tự nhiên bất kì từ 0 đến 9 dưới dạng chữ.
Nhập số (0 9): 9
Số 9 đọc là chín
8. Nhập vào 3 số tự nhiên a, b và c. Xác định xem đây có thể là độ dài 3 cạnh của 1 tam giác hay
không. Nếu có thì tính diện tích tam giác này đồng thời kiểm tra xem đây có phải là tam giác
đặc biệt hay không (cân, đều, hoặc vuông).
Nhập a, b, c: 3 4 5
Đây là 3 cạnh của 1 tam giác vuông có diện tích 6
Nhập a, b, c: 3 4 6
Đây là 3 cạnh của 1 tam giác có diện tích 5.33

9. Xác định chữ số lớn nhất của một số nguyên gồm ba chữ số.
Nhập số nguyên (gồm 3 chữ số): 362
Chữ số lớn nhất là 6
10. Tính tổng các chữ số của một số nguyên gồm ba chữ số.
Nhập số nguyên (gồm 3 chữ số): 362
Tổng các chữ số là 11
11. Xác định số ngày của một tháng.
Nhập vào tháng, năm: 10 2011
Tháng 10/2011 có 31 ngày!
12. Tính tiền cước Taxi. Biết rằng: 1km đầu tiên là 13000đ, mỗi km tiếp theo là 12000đ, nếu lớn
hơn 30km thì mỗi km thêm sẽ là 11000đ.
Nhập số km: 31
Tiền cước: 372000 đồng
BÀI TẬP TIN HỌC ĐẠI CƯƠNG | CẤU TRÚC RẼ NHÁNH
4
10/2012
13. Nhập vào hai số tự nhiên bất kì tương ứng là chiều rộng và chiều dài của một hình chữ nhật.
Cho biết đây là hình vuông, hình chữ nhật đứng hay hình chữ nhật nằm.
Nhập vào chiều dài, chiều rộng: 4 6
Đây là hình chữ nhật đứng.
14. * Tính cước sử dụng ADSL trong một tháng khi biết dung lượng sử dụng, biết:
Dung lượng 500 MB đầu 500 MB tiếp theo 500 MB tiếp theo Các MB tiếp theo
Giá của 1 MB 50 đồng 40 đồng 30 đồng 20 đồng
Nếu một thuê bao sử dụng quá nhiều thì tối đa chỉ lấy 299000 đồng.
Nhập số MB sử dụng của thuê bao: 810
Tiền cước: 37400 đồng
15. * Xác thời điểm tiếp theo (sau 1 giây) của một thời điểm (giả sử thời điểm vào là hợp lệ)
Nhập vào giờ, phút, giây: 01 59 59
01:59:59 sau 1 giây sẽ là 02:00:00
16. * Xác định ngày tiếp theo của một ngày nào đó (giả sử ngày nhập vào là hợp lệ)

Nhập vào ngày, tháng, năm: 31 10 2011
Ngày tiếp theo của ngày 31/10/2011 là ngày 01/11/2011
D. CẤU TRÚC LẶP
Viết chương trình:
1. Tính n!, với n là một số nguyên dương.
Nhập n: 4
4! = 24
2. Tính n!, với n là một số nguyên dương.
Nhập n: 4
4! = 1*2*3*4 = 24
3. Tìm tất cả các ước số của một số nguyên dương.
Nhập số nguyên dương: 6
Các ước số của 6 là: 1 2 3 6
4. Tìm tất cả các phương án kết hợp 3 loại giấy bạc 100đ, 200đ, 500đ với nhau để cho ra số tiền
10000đ.
Phương án 1: 0 tờ 100đ, 5 tờ 200đ, 18 tờ 500đ
Phương án 2: 0 tờ 100đ, 10 tờ 200đ, 16 tờ 500đ

Phương án 537: 98 tờ 100đ, 1 tờ 200đ, 0 tờ 500đ
BÀI TẬP TIN HỌC ĐẠI CƯƠNG

|

CẤU TRÚC LẶP
5
10/2012
5. Trả lời câu hỏi sau bằng cách duyệt tất cả các cách có thể để tìm kết quả:
Yêu nhau cau sáu bổ ba
Ghét nhau cau sáu bổ ra làm mười
Mỗi người một miếng trăm người

Có mười bảy quả hỏi người ghét yêu.
Đáp án: có người thương và người ghét
6.
Tìm phương án tối ưu (số tờ tiền là ít nhất) kết hợp 3 loại giấy bạc 100đ, 200đ, 500đ với
nhau để cho ra số tiền 10000đ.
Phương án tối ưu: 1 tờ 100đ, 2 tờ 200đ, 19 tờ 500đ
7. Kiểm tra xem một số nguyên dương n có là số nguyên tố hay không?
Nhập số nguyên dương: 23
23 là một số nguyên tố
8.
Kiểm tra xem một số nguyên n ≥ 2 có phải là số nguyên tố hay không? Nếu không phải là số
nguyên tố (hợp số) thì đưa ra một ví dụ (tích của a*b trong đó a, b khác 1 và n) để chứng
minh.
Nhập số nguyên dương: 23
23 là một số nguyên tố
Nhập số tự nhiên: 15
15 là hợp số vì 15 = 3*5
9. Tìm các số nguyên tố nhỏ hơn một số nguyên dương n cho trước.
Nhập số nguyên dương: 11
Các số nguyên tố nhỏ hơn 9 là: 2 3 5 7
10. Kiểm tra xem một số nguyên dương n có phải là số chính phương không?
Nhập số nguyên dương: 14
14 không là một số chính phương
Nhập số nguyên dương: 25
25 là môt số chính phương vì 25 = 5*5
11. Kiểm tra xem một số nguyên dương n có phải là số hoàn hảo hay không? (Số hoàn hảo là số
có tổng tất cả các ước số bằng hai lần chính nó).
Nhập số nguyên dương: 6
6 là một số hoàn hảo
12. Đếm xem số tự nhiên n có bao nhiêu chữ số.

Nhập số tự nhiên: 1420
Số chữ số của 1420 là 4
BÀI TẬP TIN HỌC ĐẠI CƯƠNG | CẤU TRÚC LẶP
6
10/2012
13. Hiển thị các chữ số của một số tự nhiên n theo thứ tự từ phải sang trái.
Nhập số tự nhiên: 1420
Các chữ số của 1420 lần lượt là 0 2 4 1
14. Tính tổng của các chữ số của một số tự nhiên n.
Nhập số tự nhiên: 1420
Tổng các chữ số của 1420 là 7
15. Tìm chữ số lớn nhất của một số tự nhiên n.
Nhập số tự nhiên: 1420
Chữ số lớn nhất của 1420 là 4
16. Kiểm tra xem một số nguyên dương n có phải là số Amstrong hay không?
(Một số
được gọi là số Amstrong nếu ).
Nhập số nguyên dương: 153
153 là một số Amstrong
17. Tìm ước số chung lớn nhất và bội số chung nhỏ nhất của hai số nguyên dương a, b.
Nhập hai số nguyên dương: 6 9
Ước số chung lớn nhất của 6 và 9 là
3
Bội số chung nhỏ nhất của 6 và 9 là
18
18. Đọc một số tự nhiên.
Nhập số tự nhiên: 1410
Đọc là: một bốn một không
19. Lấy ra chữ số ở vị trí nào đó (tính từ phải sang trái) của một số tự nhiên.
Nhập số tự nhiên: 1410

Bạn muốn lấy chữ số ở vị trí nào thứ:3
Chữ số ở vị trí thứ 3 (từ phải sang trái) của số 1410 là : 4
20. Lấy ra chữ số ở vị trí nào đó (tính từ trái sang phải) của một số tự nhiên.
Nhập số tự nhiên: 1410
Bạn muốn lấy chữ số ở vị trí nào thứ:3
Chữ số ở vị trí thứ 3 (từ trái sang phải) của số 1410 là : 1
21. Liệt kê các số hoàn hảo nhỏ hơn 9000. Số hoàn hảo là số có tổng các ước số của nó (không kể
nó) bằng chính nó. Ví dụ: số 6 là số hoàn hảo vì tổng các ước số là 1+2+3=6.
Các số hoàn hảo nhỏ hơn 9000 là: 6 28 496 8128
22. Liệt kê tất cả các số có 3 chữ số sao cho tổng lập phương của các chữ số bằng chính số đó.
153 370 371 407
BÀI TẬP TIN HỌC ĐẠI CƯƠNG | CẤU TRÚC LẶP
7
10/2012
23. In ra bảng cửu chương từ 5 đến 9.
5 x
1 =
5 |
6 x
1 =
6 |
7 x
1 = 7 |
8 x
5 x
2 = 10 |
6 x
2 = 12 |
7 x
2 = 14 |

8 x
5 x
3 = 15 |
6 x
3 = 18 |
7 x
3 = 21 |
8 x
5 x
4 = 20 |
6 x
4 = 24 |
7 x
4 = 28 |
8 x
5 x
5 = 25 |
6 x
5 = 30 |
7 x
5 = 35 |
8 x
5 x
6 = 30 |
6 x
6 = 36 |
7 x
6 = 42 |
8 x
5 x

7 = 35 |
6 x
7 = 42 |
7 x
7 = 49 |
8 x
5 x
8 = 40 |
6 x
8 = 48 |
7 x
8 = 56 |
8 x
5 x
9 = 45 |
6 x
9 = 54 |
7 x
9 = 63 |
8 x
24. Vẽ hình chữ nhật đặc kích thước m×n bằng các dấu *.
Nhập m, n: 4 5
* * * * *
* * * * *
* * * * *
* * * * *
25. Vẽ hình chữ nhật rỗng kích thước m×n.
Nhập m, n: 4 5
* * * * *
* *

* *
* * * * *
26. Vẽ tam giác vuông cân đặc có độ dài của cạnh là a.
Nhập độ dài của cạnh: 4
*
* *
*
27. Vẽ tam giác cân có chiều cao h.
Nhập chiều cao tam giác: 4
*
* *
*
28. Vẽ tam giác cân rỗng có chiều cao h.
Nhập chiều cao tam giác: 4
*
* *
* *
*
BÀI TẬP TIN HỌC ĐẠI CƯƠNG
1 = 8 |
9 x
1 = 9 |
2 = 16 |
9 x
2 = 18 |
3 = 24 |
9 x
3 = 27 |
4 = 32 |
9 x

4 = 36 |
5 = 40 |
9 x
5 = 45 |
6 = 48 |
9 x
6 = 54 |
7 = 56 |
9 x
7 = 63 |
8 = 64 |
9 x
8 = 72 |
9 = 72 |
9 x
9 = 81 |
|

CẤU TRÚC LẶP
8
10/2012
29. * Liệt kê tất cả các số Fibonacci nhỏ hơn hoặc bằng số tự nhiên n. Dãy số Fibonacci {
}
được định nghĩa như sau:
{
Nhập n: 20
1 1 2 3 5 8 13
30. * Tính sin(a) với độ chính xác 0.01 ( tính theo độ).
Biết: với tính theo radian.
Nhập góc (theo độ): 30

sin(30) = 0.5
31. * Tính với độ chính xác 0.01 ( tính theo độ).
Biết: với tính theo radian.
Nhập góc (theo độ): 30
cos(60) = 0.5
32. * Tính π với độ chính xác đến n chữ số sau dấu chấm thập phân,
biết:
Độ chính xác (số chữ số sau dấu chấm thập
phân): 3
PI = 3.142
Độ chính xác (số chữ số sau dấu chấm thập
phân): 4
PI = 3.1416
E. HÀM - ĐỆ QUY
Viết chương trình (có sử dụng hàm):
1. Tìm số lớn nhất trong 3 số thực.
Nhập 3 số thực: 1.3 7.4 5
Số lớn nhất là: 7.4
Gợi ý: xây dựng hàm có 3 tham số là kiểu số thực (float hoặc double), giá trị trả về của hàm là kiểu
số thực (float hoặc double).
BÀI TẬP TIN HỌC ĐẠI CƯƠNG | HÀM - ĐỆ QUY
9
10/2012
2. Kiểm tra năm nhuận. Chương trình kết thúc khi nhấn phím ESC.
Nhập vào một năm: 1993
Đây không phải là một năm nhuận.
Nhấn phím ESC để thoát, phím bất kỳ để tiếp tục (giả sử
nhấn ENTER) Nhập vào một năm: 1994
Đây là một năm nhuận.
Nhấn phím ESC để thoát, phím bất kỳ để tiếp tục (giả sử nhấn ESC)

Chú ý: Năm nhuận là năm:
 Chia hết cho 4 và không chia hết cho 100, hoặc
 Chia hết cho 400
Gợi ý:
 Sử dụng hàm getch() để đọc ký tự khi hỏi có tiếp
tục không.  Mã ASCII của ESC là 27.
 Sử dụng cấu trúc do while để lặp.
3. Kiểm tra số nguyên dương có phải là nguyên tố không ? Chương trình kết thúc khi nhập vào
số không.
Nhập vào một số nguyên dương (0 để dừng): 6
> 6 không phải là một số nguyên tốt vì có một ước số
là 2.
Nhập vào một số nguyên dương (0 để dừng): 13
> 13 là một số nguyên tố.
Nhập vào một số nguyên dương (0 để dừng): 0
Gợi ý: Viết một hàm để kiểm tra SNT (có 1 đối số là số nguyên cần kiểm tra, giá trị trả về có kiểu
int: =1 nếu là SNT, =0 nếu không là SNT) sau đó sử dụng cấu trúc do while để lặp. Trong
mỗi vòng lặp, trước tiên nhập số nguyên x sau đó có gọi hàm kiểm tra SNT ở trên.
4.
Tìm các số nguyên tố thuộc đoạn [a,b], với a, b là hai số nguyên dương cho
trước và a < b.
Nhập đoạn [a,b]: 10 20
Các số nguyên tố trong đoạn [10,20] là: 11, 13,
17, 19
Có tất cả 4 số.
Gợi ý: Duyệt các số nguyên từ a đến b. Với mỗi số nguyên, gọi hàm kiểm tra SNT. Nếu là SNT thì
xuất ra màn hình đồng thời « đếm ». Để « đếm » số SNT tìm được, cần một biến kiểu nguyên, ban đầu
khởi tạo =0, mỗi lần « đếm » chỉ đơn giản tăng biến này lên 1.
5. Tính a
n

với n là số tự nhiên theo 2 cách đệ quy và không đệ quy.
6. Tính giai thừa của một số tự nhiên bằng 2 cách đệ quy và không đệ quy.
Nhập n: 4
4! = 24
7. Tính S = 0! + 1! + 2! + 3! + … + n!, với n là một số tự nhiên.
Nhập n: 4
S = 0! + 1! + 2! + 3! + 4! = 34
BÀI TẬP TIN HỌC ĐẠI CƯƠNG | HÀM - ĐỆ QUY
10
10/2011
Gợi ý: Có 2 cách để làm:
 Sử dụng hàm tính giai thừa ở trên. Cách này không tối ưu vì khi tính (k+1)! không tận dụng k! đã
tính trước đó.
 Giả sử đã tính xong S = 1! + 2! + … + k! và cần phải tính tiếp (k+1)! + (k+2)! + … + n! để bổ
sung vào S. Để
tính tiếp (k+1)! và cộng dồn vào S mà không phải tính lại từ đầu (nghĩa là (k+1)! = 1 * 2 * … *
(k+1)) thì cần
tạo một biến gt để lưu giá trị giai thừa đang tính (gt = k!). Cứ mỗi lần tính (k+1)! để cộng dồn
vào S thì gán lại gt = gt * (k+1) và S = S + gt.
8. Tính C
nk
với n, k là các số nguyên dương và k n.
Nhập n, k: 5 3
C(5,3) = 10
9. Tìm ước số chung lớn nhất của hai số nguyên dương.
Nhập a, b: 8 12
UCLN(8,12) = 4
10. Tìm bội số chung nhỏ nhất của hai số nguyên dương.
Nhập a, b: 4 6
UCLN(4,6) = 12

11. Tìm ước số chung lớn nhất của ba số nguyên dương.
Nhập a, b, c: 8 12 10
UCLN(8,12,10) = 2
12. Tìm bội số chung nhỏ nhất của ba số nguyên dương.
Nhập a, b: 4 6 5
UCLN(4,6,5) = 60
13. Tính tổng các chữ số của một số nguyên dương.
Nhập một số nguyên dương: 465
Tổng các chữ số của 465 là 15
14. Hiển thị các số tự nguyên tố nằm trong đoạn [a, b], biết số tự nguyên tố là số có tổng các
chữ
số của nó là một số nguyên tố. Trên mỗi hàng chỉ ghi tối đa 20 số.
Nhập a, b: 10 99
Các số tự nguyên tố thuộc đoạn [10,99] là:
10 11 12 14 16 20 21 23 25 29 30 32 34 38 41 43 47
49 50 52 56 58 61 65 67 70 74 76 83 85 89 92 94 98
15. Tìm số đảo ngược của một số nguyên dương.
Nhập một số nguyên dương: 1340
Số đảo ngược của 1340 là số 431
BÀI TẬP TIN HỌC ĐẠI CƯƠNG | MẢNG MỘT CHIỀU
11
011
16. Tìm số Fibonacci lớn nhất nhỏ hơn một số nguyên n cho trước theo 2 cách đệ quy và không
đệ quy.
Nhập n: 15
Fibonacci lớn nhất nhỏ hơn 15 là 13
F. MẢNG MỘT CHIỀU
Viết chương trình:
1. Nhập vào một mảng A gồm n (n ≤ 100) phần tử số nguyên, sau đó hiển thị mảng vừa nhập lên
màn hình theo các dạng sau:

a. a
0
a
1
a
2
… a
n-1
Các phần tử các nhau bởi một khoảng trắng
b. a
0
,a
1
,a
2
,…,a
n-1
Các phần tử các nhau bởi dấu phẩy
c. [a
0
a
1
a
2
… a
n-1
] Các phần tử các nhau bởi một khoảng trắng và được bao bởi cặp dấu [ ]
a. Nhập vào số phần tử của mảng: 7
Nhập phần tử thứ 1: 1
Nhập phần tử thứ 2: 2

Nhập phần tử thứ 3: 8
Nhập phần tử thứ 4: 4
Nhập phần tử thứ 5: 7
Nhập phần tử thứ 6:
10
Nhập phần tử thứ 7: 9
Mảng vừa nhập là: 1 2 8 4 7 10 9
Mảng vừa nhập là:
1,2,8,4,7,10,9
Mảng vừa nhập là: [1 2 8 4
7 10 9]
2. Khởi tạo một mảng có 10 phần tử là các số nguyên khác nhau từng đôi một. Tìm vị trí và giá
trị của phần tử có giá trị lớn nhất trong mảng.
Phần tử có giá trị lớn nhất trong mảng [2 5 3 -3 7 6 1
-10 5 0] là phần tử thứ 5, có giá trị là 7.
Gợi ý: Cần 2 biến để lưu giá trị lớn nhất (vd: max) và vị trí tương ứng (vd: maxi). Khởi tạo max =
giá trị phần tử đầu tiên, maxi = 1 (tức vị trí của phần tử đầu tiên). Duyệt từ phần tử thứ 2 cho đến cuối
mảng, với mỗi phần tử, nếu thấy giá trị của nó lớn hơn max thì cập nhật max và maxi.
3.
Sinh một mảng gồm n (n ≤ 50) phần tử là các số nguyên ngẫu nhiên có giá trị thuộc
[0, 127].
Nhập số phần tử: 5
Mảng ngẫu nhiên gồm 5 phần tử là: [3 7 100 97 23]
Gợi ý:
 Xây dựng một hàm để tạo ngẫu nhiên 1 mảng. Hàm có 2 đối số là mảng và số phần tử của mảng.
Hàm không
cần giá trị trả về (void). Để ngẫu nhiên một số nguyên, cần include stdlib.h và time.h.
Trước khi sinh ngẫu
nhiên, gọi srand(time(NULL)) để khởi động bộ sinh ngẫu nhiên. Nếu không gọi thế này thì cứ
mỗi lần chạy

chương trình sẽ chỉ ra một bộ số “ngẫu nhiên” như nhau. Mỗi lần muốn có một số ngẫu
nhiên thì gọi hàm rand(). Hàm này sẽ trả về một số nguyên ngẫu nhiên từ 0 đếm
RAND_MAX.
BÀI TẬP TIN HỌC ĐẠI CƯƠNG | MẢNG MỘT CHIỀU10/2011
 Trong chương trình chính, khai báo một mảng nguyên a và một biến n lưu số phần tử của mảng.
Gọi hàm tạo mảng ngẫu nhiên ở trên, sau đó xuất mảng vừa tạo ra màn hình.
4. Sinh một mảng gồm n (n ≤ 40) phần tử là các số thực ngẫu nhiên có giá trị thuộc [0, 100].
Nhập số phần tử: 5
Mảng ngẫu nhiên gồm 5 phần tử là: [3.00 7.20 95.21 97.36 23.23]
5. Sắp xếp tăng dần mảng các số nguyên có kích thước n (n ≤ 50) phần tử được sinh ngẫu nhiên,
giá trị mỗi phần tử thuộc [1, 500].
Nhập số phần tử: 5
Mảng ngẫu nhiên gồm 5 phần tử là: [64 32 66 97
23]
Mảng sau khi sắp xếp là: [23 32 64 66 97]
Gợi ý:
 Sử dụng hàm được tạo ở câu trên để sinh ngẫu nhiên một mảng.
 Tạo một hàm để sắp xếp mảng. Hàm này nhận 2 đối số: một mảng nguyên và một số nguyên là
số phần tử của mảng. Hàm không có giá trị trả về.
 Trong chương trình chính, khai báo một mảng nguyên a và một biến n lưu số phần tử của mảng.
Gọi hàm tạo mảng ngẫu nhiên ở trên, sau đó gọi hàm sắp xếp mảng và cuối cùng xuất mảng vừa
sắp xếp màn hình.
6.
Khởi tạo hai mảng A và B có kích thước lần lượt là n và m phần tử (n, m ≤ 40) chứa các số
nguyên trong phạm vi [1, 500]. Sắp xếp hai mảng này theo thứ tự tăng dần, sau đó trộn 2
mảng lại với nhau sao cho mảng nhận được là một mảng tăng dần.
Mảng ban đầu:
A: [4 7 9 2]
B: [6 8 1 3 5]
Mảng sau khi sắp xếp:

A: [2 4 7 9]
B: [1 3 5 6 8]
Trộn mảng A và B ta được: [1 2 3 4 5 6 7 8 9]
Gợi ý:
 Sử dụng câu trên để sắp xếp mảng theo thứ tự tăng dần
 Trộn hai mảng bằng cách: sử dụng hai biến i và j lần lượt là vị trí trong hai mảng A và B. Bạn đầu,
i=j=0. Sẽ lặp
cho đến khi i=m hoặc j=n. Mỗi lần lặp sẽ bổ sung a[i] hoặc b[j] vào mảng C đồng thời tăng i hoặc j
tùy theo giá
trị của a[i] và b[j] (phần tử nào nhỏ hơn thì bổ sung). Khi i=m hoặc j=n, nghĩa là có 1 mảng đã duyệt
hết, thì chỉ
đơn giản duyệt các phần tử của mảng kia và bổ sung vào C.
 Xuất mảng C ra màn hình.
7.
Nhập vào một mảng số thực gồm n (n ≤ 30) phần tử, sau đó kiểm tra xem mảng này có đối
xứng hay không. Một mảng { } được gọi là đối xứng nếu
Mảng A: [7.2 5.0 5.0 7.2]
Mảng này đối xứng
Mảng A: [1.0 3.3 3.3 2.0]
Mảng này không đối xứng
BÀI TẬP TIN HỌC ĐẠI CƯƠNG | MẢNG MỘT CHIỀU10/2011
Gợi ý: Kiểm tra tính đối xứng bằng cách cho một biến i chạy từ 0 đến n/2, kiểm tra xem a
i
có bằng
phần tử tương ứng an-i hay không. Nếu có thì tiếp tục duyệt, ngược lại thì dừng và kết luận mảng
không đối xứng. Nếu duyệt xong, nghĩa là thỏa mãn tính đối xứng thì kết luận mảng là đối xứng.
8. Nhập vào một mảng các số nguyên gồm n (n ≤ 20) phần tử sau đó tính trung bình cộng các số
chẵn.
Nhập vào số phần tử của mảng: 4
Phần tử thứ 1: 3

Phần tử thứ 2: 2
Phần tử thứ 3: 5
Phần tử thứ 4: 8
Trung bình cộng các số chẵn là: 5.00
9. Liệt kê các phần tử có giá trị nhỏ hơn hoặc bằng x trong một mảng gồm n (n ≤ 30) phần tử số
thực được sinh ngẫu nhiên, mỗi phần tử có giá trị thuộc đoạn [0, 10].
Nhập vào số phần tử của mảng: 6
Mảng được sinh ngẫu nhiên gồm 6 phần tử là: [2.3 8.5 4.0 7.2
10.0 9.8] Nhập vào x: 5.3
Có 2 phần tử trong mảng có giá trị nhỏ hơn hoặc bằng
5.3.
Đó là: 2.3 4.0
10. Nhập vào một mảng các số thực gồm n (n ≤ 100) phần tử và một số nguyên k. Xóa phần tử
thứ k trong mảng.
Nhập vào số phần tử của mảng: 4
Phần tử thứ 1: 3.2
Phần tử thứ 2: 2.3
Phần tử thứ 3: 5.6
Phần tử thứ 4: 8.4
Nhập vị trí phần tử cần xóa: 2
Mảng sau khi xóa phần tử thứ 2 là: 3.2 5.6 8.4
11. Xây dựng hàm để xóa phần tử có giá trị bằng x trong mảng gồm n phần tử là các số nguyên.
Hãy sinh ra một mảng các nguyên ngẫu nhiên gồm (n ≤ 100) phần tử, mỗi phần tử có giá trị
thuộc đoạn [0, 200], sau áp dụng hàm trên để xóa tất cả các phần tử có giá trị bằng x.
Nhập vào số phần tử của mảng: 7
Mảng được sinh ngẫu nhiên gồm 7 phần tử là: 3 5 5 4 7
5 9
Nhập vào x: 5
Mảng sau khi xóa các phần tử có giá trị bằng 5: 3 4
7 9

Có 3 phần tử bị xóa khỏi mảng.
12. Chèn một số nguyên x vào mảng A sao cho sau khi chèn, mảng A có thứ tự tăng dần. Biết rằng
trước đó mảng A đã có thứ tự tăng dần.
Mảng A ban đầu: [1 3 5 7]
Nhập x: 4
Mảng A sau khi chèn x = 4: [1 3 4 5 7]
BÀI TẬP TIN HỌC ĐẠI CƯƠNG | MẢNG MỘT CHIỀU0/2011
13. Nhập vào mảng A gồm n (n ≤ 100) phần tử là các số nguyên dương. Trong quá trình nhập
kiểm tra các phần tử nhập vào không được trùng, nếu trùng thì thông báo và yêu cầu nhập
lại. Quá trình nhập dừng lại khi nhập vào số 0.
Nhập phần tử thứ 1: 5
Nhập phần tử thứ 2: 3
Nhập phần tử thứ 3: 5
Đã có phần tử này trong mảng. Vui lòng
nhập lại! Nhập phần tử thứ 3: 4
Nhập phần tử thứ 4: 0
Mảng vừa nhập là [5 3 4], gồm có 3 phần tử.
14. Quay vòng mảng A sang phải k vị trí.
Nhập số phần tử n: 6
Nhập mảng A: 3 5 1 2 4
Nhập số vị xoay k: 3
Mảng A sau khi xoay 3 vị trí: 1 2 4 3 5
Gợi ý: Viết hàm để quay mảng A sang phải k vị trí. Có 2 cách để quay sang phải k vị trí. Cách 1: tạo
một mảng mới sau đó dễ dàng tính toán vị trí sau khi quay của mảng ban đầu (tốn thêm bộ nhớ nhưng
chạy nhanh hơn). Cách 2: lần lượt quay từng vị trí, mỗi lần chỉ quay 1 vị trí (không tốn thêm bộ nhớ
nhưng chạy lâu hơn).
15. Tách 1 mảng các số nguyên X thành 2 mảng A và B, sao cho mảng A chứa toàn số lẻ và mảng B
chứa toàn số chẵn. Mảng X được sinh một cách ngẫu nhiên với mỗi phần tử có giá trị thuộc
đoạn [1, 50].
Nhập số phần tử của mảng X: 7

Mảng X được sinh ngẫu nhiên: [22 7 14 30 43
6 2]
Sau khi tách, ta có:
- Mảng A: [7 43]
- Mảng B: [22 14 30 6 2]
16. Nhập vào một mảng A gồm n (n ≤ 100) phần tử số nguyên, sau đó hiển thị các dãy con tăng có
trong mảng.
Nhập vào số phần tử của mảng: 7
Nhập phần tử thứ 1: 1
Nhập phần tử thứ 2: 2
Nhập phần tử thứ 3: 8
Nhập phần tử thứ 4: 4
Nhập phần tử thứ 5: 7
Nhập phần tử thứ 6:
10
Nhập phần tử thứ 7: 9
Mảng vừa nhập là: [1 2 8 4 7 10 9]
Các dãy con tăng trong mảng là:
- Dãy con thứ 1: 1 2 8
- Dãy con thứ 2: 4 7 10
- Dãy con thứ 3: 9
BÀI TẬP TIN HỌC ĐẠI CƯƠNG | MẢNG MỘT CHIỀU
15
10/2011
17. Tìm giá trị lớn thứ k trong mảng A gồm n số tự nhiên (n ≤ 50). Mảng A được sinh một cách
ngẫu nhiên với mỗi phần tử có giá trị thuộc đoạn [0, 30].
Nhập vào số phần tử của mảng: 7
Mảng được sinh ngẫu nhiên gồm 7 phần tử là: [1 2 8 9 8
10 4] Bạn muốn tìm giá trị lớn thứ mấy?: 2
Giá trị lớn thứ 2 của mảng là 9.

Nhập vào số phần tử của mảng: 7
Mảng được sinh ngẫu nhiên gồm 7 phần tử là: [1 2 8 9 8
10 4] Bạn muốn tìm giá trị lớn thứ mấy?: 4
Giá trị lớn thứ 4 của mảng là 4.
18. Tìm giá trị xuất hiện nhiều nhất trong mảng các số nguyên.
Mảng A ban đầu: [1 4 5 4 5 4 7]
Giá trị xuất hiện nhiều nhất là 4 (xuất hiện 3 lần).
19. In ra tam giác Pascal.
Mảng chiều cao: 5
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
Gợi ý: Sử dụng 2 mảng: một mảng để lưu hàng hiện tại của tam giác, mảng kia để tính hàng tiếp theo.
20. Nhập vào hai số nguyên dương a, b (a, b có tối đa 50 chữ số và a > b). Tính tổng và hiệu của
hai số trên.
Nhập a: 124356847384
Nhập b: 293847563
a + b = 124650694947
a - b = 124062999821
21. * Nhập vào hai số nguyên dương a, b (a, b có tối đa 50 chữ số). Tính tích của hai số trên.
Nhập a: 12435684
Nhập b: 2938
a * b = 36536039592
22. * Liệt kê tất cả các chuỗi nhị phân độ dài k theo thứ tự từ điển.
Nhập k: 2
Các chuỗi nhị phân có độ dài 2 là:
00
01

10
11
BÀI TẬP TIN HỌC ĐẠI CƯƠNG | MẢNG MỘT CHIỀU
16
10/2011
23. * Liệt kê tất cả các hoán vị của tập {1,2, ,n} theo thứ tự từ điển.
Nhập n: 3
Các hoán vị của tập {1,2,3} là:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
24. * Liệt kê tất cả các tổ hợp chập k của n phần tử theo thứ tự từ điển.
Nhập n, k: 4 2
Các tổ hợp chập 2 của 4 phần tử {1,2,3,4}
là:
1 2
1 3
1 4
2 3
2 4
3 4
25. ** Liệt kê tất cả các tập con của tập A (gồm n phần tử trong một mảng cho trước, mảng này có
thứ tự tăng dần) sao cho tổng giá trị các phần tử trong tập con này bằng một số nguyên k cho
trước. Biết tập A gồm các phần tử có giá trị khác nhau từng đôi một.
Tập A ban đầu: 1 2 5 4
Nhập k: 6
Các tập con của A có tổng bằng 6 là:

1 5
2 4
Gợi ý: Có một cách là duyệt lần lượt các dãy nhị phân có độ dài n. Mỗi chuỗi sẽ tương ứng với một
tập con của A (=1 nghĩa là thuộc tập A, =0 nghĩa là không thuộc tập A).
BÀI TẬP TIN HỌC ĐẠI CƯƠNG | MẢNG MỘT CHIỀU
17

×