Tải bản đầy đủ (.docx) (11 trang)

Bài tập kỹ thuật lập trình

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 (142.9 KB, 11 trang )

CÁC BÀI TẬP KĨ THUẬT LẬP TRÌNH THƯỜNG GẶP
ATM
Hãy thực hiện các công việc sau cho mỗi bài toán
dưới đây:
- Nêu ý tưởng (hướng giải quyết bài toán)
- Trình bày cụ thể các bước của thuật toán
- Cài đặt minh họa thành hàm/ct con để giải bài
toán
Bài 1: Cho a là mảng một chiều các số nguyên gồm n
phần tử,
có tính chất như sau:
- các số lẻ ở đầu dãy, có thứ tự tăng dần (gồm n1
phần tử)
- các số chẵn ở cuối dãy, giảm dần (gồm n2 phần tử)
Hãy đề xuất một thuật toán hiệu quả cho phép tìm
kiếm
một giá trị x bất kỳ trong dãy này.
Bài 2: Cho M là một ma trận kích thước dxc, có thứ
tự
tăng dần từ trái qua phải, từ trên xuống dưới.
Hãy đề xuất và cài đặt một thuật toán hiệu quả, cho
phép
tìm kiếm một giá trị x trên ma trận này.
Bài 3: Cho M là một ma trận vuông kích thước nxn,
chứa các
giá trị không âm (>=0) và (i,j) là một vị trí bất
kỳ trong
ma trận.
Yêu cầu: Hãy áp dụng giải thuật tham lam (greedy)
để tìm
đường đi từ ô (i,j) đến một cạnh của ma trận sao


cho tổng
giá trị các ô trên đường đi là NHỎ NHẤT.
vét cạn
Bài 1: Tìm và in ra tất cả các đường đi có thể có
từ điểm
(i,j) đến 1 cạnh của ma trận.
Bài 2: Tìm và in ra tất cả các vị trí xuất hiện của
x trong
mảng 1 chiều (a,n)
Bài 3: Tìm và in ra tất cả các chuỗi ký tự khác
nhau, chỉ
gồm những chữ cái in hoa, có độ dài bằng 5 và bắt
đầu bằng
một nguyên âm (AEIOUY).
Bài 4: Viết hàm tìm tất cả các vị trí có thể tạo
thành đường
4 (chặn 1 đầu) hoặc đường 3 (không bị chặn) của
quân k
(k=0 hoặc k=1) trong trò chơi caro. Trạng thái hiện
tại
của bàn cờ được cho trước.
Bài 5: Cho trước đồ thị có hướng có trọng số. Hãy
liệt kê
tất cả các đường đi khác nhau có thể có, từ đỉnh A
đến đỉnh B của đồ thị, từ đó tìm ra đường đi ngắn
nhất.
Lưu ý: đường đi trên đồ thị không được phép tạo
thành vòng.
Bài 6: Cho mảng (a,n) chứa các số nguyên. Tìm dãy
con có

tổng lớn nhất.
Đệ quy
//Bài tập mở rộng
//Viết hàm đệ quy thực hiện các công việc sau:
//1. Kiểm tra xem 1 số nguyên n có phải là số
nguyên tố ko.
//2. Kiểm tra xem mảng có thứ tự tăng hay không.
//3. Đếm số lượng phần tử là số nguyên tố có trong
mảng.
//4. Kiểm tra xem mảng có gồm các số âm dương xen
kẽ ko.
//5. Đếm số từ có trong 1 chuỗi ký tự bất kỳ.
//6. Đếm số ký tự số có trong chuỗi.
//7. Đếm số ký tự là nguyên âm trong chuỗi.
//8. Nhập/xuất mảng (a,n).
Đề 1
Câu 1/
Cho A là một mảng các số nguyên dương có n (0<n<100) phần tử đã có thứ
tự tăng dần và một số nguyên x (0<x<10000).
Yêu cầu: Chèn x vào mảng A sao cho A vẫn có thứ tự tăng dần, sau đó xuất
ra phần tử ở vị trí giữa (vị trí n/2, lấy phần nguyên) của mảng.
Dữ liệu vào: Từ bàn phím có cấu trúc như sau:
- Dòng đầu tiên lần lượt là hai số nguyên dương n và x biểu diễn số
phần tử của mảng A và phần tử x.
- Dòng tiếp theo là n số nguyên dương nhỏ hơn 10.000 (mỗi số cách
nhau ít nhất một khoảng trắng) lần lượt là n phần tử của mảng A.
Dữ liệu ra: Xuất ra màn hình một số nguyên duy nhất là giá trị tìm được.
Ví dụ:
INPUT
5 4

2 3 5 6 7
OUTPUT
5
Câu 2/
Cho A là một mảng các số nguyên dương có n (n<100) phần tử.
Yêu cầu: Đếm số lượng số nguyên tố trong mảng. (Số nguyên tố là số tự
nhiên lớn hơn 1 chỉ chia hết cho 1 và chính nó). Sắp xếp và xuất ra theo thứ
tự số lớn nhất, số nhỏ nhất, số lớn nhì, số nhỏ nhì, số lớn ba, số nhỏ 3 v v
Dữ liệu vào: có cấu trúc như sau:
- Dòng đầu tiên là một số nguyên dương duy nhất n biểu diễn số
phần tử của mảng A.
- Dòng tiếp theo là n số nguyên dương (mỗi số cách nhau ít nhất một
khoảng trắng) lần lượt là n phần tử của mảng A (0<A[i]<30.000).
Dữ liệu ra: mảng số nguyên
Ví dụ:
INPUT
6
2 3 4 5 6 7
OUTPUT
7 2 5 3
Câu 3/
DÃY TĂNG
Cho một dãy các số nguyên có n (n<200) phần tử: A
0
, A
1
, …., A
n-1
. Dãy đã
cho được gọi là tăng nghiêm ngặt nếu A

i-1
<A
i
(1, )i n
∀ ∈
(A
i
<70.000).
Yêu cầu: Kiểm tra xem dãy đã cho có được gọi là tăng nghiêm ngặt không?
Nếu có xuất ra số -1, nếu không thì xuất ra vị trí i đầu tiên kể từ đầu dãy
không thỏa tính chất A
i-1
<A
i
.
Dữ liệu vào: Nhập từ bàn phím có cấu trúc như sau:
- Dòng đầu tiên là một số nguyên dương duy nhất n biểu diễn số
phần tử của dãy A.
- Dòng tiếp theo là n số nguyên (mỗi số cách nhau ít nhất một
khoảng trắng) lần lượt là n phần tử của dãy A.
Dữ liệu ra: xuất ra màn hình một số nguyên duy nhất cho biết giá trị tính
được.
Ví dụ:
INPUT
6
1 3 5 6 4 7
OUTPUT
4
Câu 4/
ĐẾM TỪ

Cho một chuỗi ký tự (chiều dài tối đa 200 ký tự) chỉ chứa các ký tự từ a đến
z, A đến Z và ký tự trắng.( chuỗi chưa được chuẩn hóa)
Yêu cầu: Đếm xem trong chuỗi vừa nhập có bao nhiêu từ? Các từ được phân
biệt bởi một ký tự trắng.
Dữ liệu vào: Bàn phím gồm một dòng duy nhất chứa chuỗi cho trước (cuối
dòng không có ký tự xuống dòng (enter)).
Dữ liệu ra: Xuất ra màn hình một số nguyên duy nhất cho biết số từ đếm
được.
Ví dụ:
INPUT Cong nghe Thong tinOUTPUT
4
Câu 5/
Dãy số fibonaci được đinh nghĩa như sau:
F
0
= 0
F
1
= 1
F
i
= F
i-1
+ F
i-2
(Với mọi i >1)
Yêu cầu: Tìm F
n
của dãy với n nhập từ bàn phím và n <= 50. Kết quả xuất ra
màn hình một số duy nhất là giá trị tìm được.

Ví dụ 1:
INPUT
3
OUTPUT
2
Ví dụ 2:
INPUT
5
OUTPUT
5
Câu 6/
Viết chương trình tìm chữ số nhỏ nhì trong 1 số nguyên a (a có nhiều nhất 9
chữ số)
Dữ liệu vào: có một dòng duy nhất chứa 1 số nguyên a
Dữ liệu ra: 1 một số nguyên duy nhất cho biết giá trị tìm được:
Ví dụ:
INPUT
2345678
OUTPUT
2
Câu 7/
Cho A là một mảng các số nguyên dương có n (n<50) phần tử (được đánh số
từ 0 đến n-1) và một số nguyên x.
Yêu cầu: Tìm số hoàn hảo lớn nhất nhưng nhỏ hơn x.
Dữ liệu vào: Nhập từ thiết bị nhập chuẩn có cấu trúc như sau:
- Dòng đầu tiên lần lượt là hai số nguyên n và x biểu diễn số phần tử
của mảng A và phần tử x.
- Dòng tiếp theo là n số nguyên dương nhỏ hơn 10.000 (mỗi số cách
nhau ít nhất một khoảng trắng) lần lượt là n phần tử của mảng A.
Dữ liệu ra: Xuất ra thiết bị xuất chuẩn một số nguyên duy nhất cho biết giá

trị tìm được, nếu không có thì xuất ra số 0.
Ví dụ:
INPUT
6 7
2 3 4 5 6 7
OUTPUT
6
Câu 8/
Tập con
Xét tập N số tự nhiên đầu tiên{1 N}.
Nếu N=3, ta có một cách chia tập này thành 2 tập con sao cho tổng
các số trong 2 tập con này bằng nhau: {1,2} {3}
Nếu N=4, ta có một cách chia: {1,4} {2,3}
Nếu N=5 hoặc bằng 6, ta không có cách chia, vì tổng các số trong hai
tập này là 15 và 21, không thể chia đôi.
Nếu N=7 ta có 4 cách chia:
{2,3,4,5} {1,6,7}
{1,3,4,6} {2,5,7}
{1,2,5,6} {3,4,7}
{3,5,6} {1,2,4,7}
Yêu cầu: Cho giá trị N. Hãy tính số cách chia. Không liệt kê ra các
cách chia.
Dữ liệu vào: nhập từ bàn phím một số tự nhiên duy nhất N
(2<N<100).
Kết quả:xuất ra màn hình một số tự nhiên cho biết có bao nhiêu cách
chia.
Ví dụ:
INPUT:
8
OUTPUT

7
Câu 9/
TÍNH TIỀN ĐIỆN
Cho X là số Kwh điện tiêu thụ trong tháng của một hộ gia đình.
Yêu cầu: Xuất ra số tiền gia đình này phải trả biết quy định về điện
như sau:
1 - 48 Kwh đầu tiên giá 600đ/Kwh
2 - 48 Kwh tiếp theo giá 1004đ/Kwh
3 - 48 kwh kế tiếp giá 1214đ/Kwh
4 - Từ kwh thứ 145 trở đi, giá 1594đ/Kwh
Dữ liệu vào: nhập từ bàn phím một số nguyên X duy nhất (0≤X≤500) biểu
thị số Kwh đã tiêu thụ.
Dữ liệu ra: Xuất ra màn hình một số nguyên duy nhất cho biết số tiền phải
trả.
Ví dụ:
INPUT
155
OUTPUT
152798
Câu 10/
TÍNH TRUNG BÌNH CỘNG NHỎ NHẤT TRÊN MỖI DÒNG
Cho ma trận A kích thước MxN (0<M,N<100) chứa các số nguyên dương nhỏ hơn
100000.
Yêu cầu: Tính trung bình cộng của các phần tử nhỏ nhất trên mỗi dòng (làm tròn
đến phần nguyên theo nguyên tắc phần thập phân <0.5 thì làm tròn xuống, ngược
lại làm tròn lên).
Dữ liệu vào: Từ bàn phím có cấu trúc như sau:
- Dòng đầu tiên là hai số nguyên dương M, N biểu diễn kích thước của ma
trận A (M dòng, N cột).
- M dòng tiếp theo, mỗi dòng là N số nguyên (mỗi số cách nhau ít nhất

một khoảng trắng) lần lượt là N phần tử của từng dòng tương ứng của ma
trận.
Dữ liệu ra: Xuất ra màn hình một số nguyên duy nhất cho biết giá trị tính được.
Ví dụ:
INPUT
3 4
3 1 5 6
4 6 2 3
8 9 7 6
OUTPUT
3
Câu 11/
Cho A là một mảng các số nguyên dương có n (n<10000) phần tử (n là 1 số chẵn).
Yêu cầu: Tìm ước chung lớn nhất của hai phần tử nhỏ nhất trong mảng,2 phần tử
nhỏ nhì trong mảng , 2 phần tử nhỏ 3 trong mảng.v.v.v
Dữ liệu vào: Nhập từ thiết bị nhập chuẩn có cấu trúc như sau:
- Dòng đầu tiên là một số nguyên dương duy nhất n biểu diễn số phần tử
của mảng A.
- Dòng tiếp theo là n số nguyên dương nhỏ hơn 10.000 (mỗi số cách nhau
ít nhất một khoảng trắng) lần lượt là n phần tử của mảng A.
Dữ liệu ra: Ghi ra thiết bị xuất chuẩn những số nguyên là giá trị tính được.
Ví dụ:
INPUT
6
1 12 1 4 6 1 9 1 8
OUTPUT
1 6 2

×