Các bài tập kĩ thuật lập trình hay thường gặp ví dụ như bài toán ATM giải quyết vấn đề rút và gửi tiền của tài khoản , ngoài ra còn nhiều bài toán khác như tính tiền điện,TÍNH TRUNG BÌNH CỘNG NHỎ NHẤT TRÊN MỖI DÒNG,ĐẾM TỪ TRONG CHUỖI ,XÉT XEM DÃY TĂNG HAY KO ??? .... Trong tài liệu là bộ sưu tầm các bài tập kĩ thuật lập trình khá cơ bản để các bạn tham khảo
Trang 1CÁ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
Trang 2Bà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ỳ
Trang 3//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
Trang 4Dữ 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ử: A0, A1, …., An-1 Dãy đã cho được gọi là tăng nghiêm ngặt nếu Ai-1<Ai
(1, )
i n
∀ ∈
(Ai<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 Ai-1<Ai
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ụ:
Trang 56
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ụ:
4
Trang 6Câu 5/
Dãy số fibonaci được đinh nghĩa như sau:
F0 = 0
F1 = 1
Fi = Fi-1 + Fi-2 (Với mọi i >1)
Yêu cầu: Tìm Fn 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:
Trang 7Ví 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}
Trang 8Nế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:
Trang 91 - 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
Trang 10Câ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
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:
Trang 11- 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