Bài tập Chương 1: Kiểu dữ liệu có cấu trúc – nhập xuất dữ liệu | Môn Kỹ thuật lập trình Trường đại học sư phạm kỹ thuật TP. Hồ Chí Minh

2. Cho một mảng các phân số (PHANSO) gồm n phân tử (n≤50). Hãy viế chương trình nhập và xuất danh sách các phân số sau đó tìm phân số có giá trị lớn nhất, tổng và tích các phân số và nghịch đảo giá trị các phân số trong mảng. Tài liệu giúp bạn tham khảo, ôn tập và đạt kết quả cao. Mời bạn đọc đón xem!

Bài t p K p trình thut l Trang 1/30
CHƯƠNG 1: KI U D LI U C U TRÚC NH P XU T D LI U
TRÊN T P TIN
1. Cho m t l địp hc gm n h a mọc sinh (n≤50). Thông tin củ t học sinh được nh
nghĩa theo kiu d liu ca hc sinh HOCSINH gm:
• Mã số ối đa 5 ký tự hc sinh (MSHS): chui có t .
• Họ ối đa 30 ký tự tên (hoten): chui có t .
• Ngày tháng năm sinh (ngaysinh): kiểu DATE.
• Đị ối đa 50 ký tựa ch (diachi): chui có t .
• Giớ ối đa 3 ký tựi tính (phai): chui có t .
• Điểm trung bình (diemtb): s thc.
Hãy vi p xu t danh sách h m xem ết chương trình nhậ ọc sinh sau đó đế
bao nhiêu h c lên l u ki c lên lọc sinh đư ớp (Điề ện đượ ớp là điểm trung bình
5.0).
Hướng dn:
- Trước hết ta ph i xây d ng hàm nh p và xu t cho 1 h c sinh.
- Xây dng hàm nh p và xu u d u DATE). ất ngày tháng năm (Kiể li
- Sau đó mới xây dng hàm nhp và xut cho danh sách hc sinh.
2. Cho mt m ng các phân s (PHANSO) gm n ph n t (n≤50). y viế chương t
trình nh p xu t danh sách các phân s giá tr l n nh sau đó tìm phân số t,
t ng.ng và tích các phân s và ngh o giá trịch đả các phân s trong m
Hướng dn:
- Trước hết ta ph i xây d ng hàm nh p và xu t cho 1 phân s .
- Xây d ng hàm tính t ng, hi n, so sánh ệu, tích, thương, rút gọ
nghịch đảo cho 2 phân s.
- Sau đó mới xây dng hàm nhp, xut, tính tng, tích cho mng các
phân s .
3. Viết chương trình nhp vào 2 struct THOIGIAN (g m gi , phút, giây). Ki m tra
th i gian nhp vào có h p l không, nếu h p l thì xut ra khong cách gia 2 m c
thi gian trên.
4. Viết chương trình nhp vào 2 struct DATE (g m ngày, tháng, m tra ngày năm), kiể
nhp vào có hp l hay không, n u có thì xu t ra kho ng cách gi ngày. ế a 2
Bài t p K p trình thut l Trang 2/30
5. Viết chương trình khai báo kiể ểu này đểu d liu th hin mt s phc. S dng ki
viết hàm tính t ng, hi u, tích c a hai s phc.
6. Viết chương trình khai báo kiể ệu đểu d li biu din mt phân s. y viết hàm
thc hi c sau: n nh ng công vi
a) Tính tng, hi . ệu, tích, thương hai phân s
b) Rút gn phân s .
c) Qui đồng hai phân s.
d) So sánh hai phân s .
7. Viết chương trình khai báo kiể ệu đểu d li biu din mt hn s. Hãy viết hàm thc
hin nh ng công vi c sau :
a) Đổi hn s sang phân s
b) Tính tng, tích hai h n s
8. Viết chương trình khai báo ki ệu để ột điể ọa độu d li biu din m m trong h t 0xy
. Hãy vi t hàm th n các công vi c sau: ế c hi
a) Tìm nh i x ng c , to tâm. ững điểm đố ủa nó qua tung độ, hoành độ độ
b) Hãy tính t ng, hi u, tích c m trong m ng to ủa hai điể t ph độ 0xy.
c) Tính khong cách gi ữa hai điểm.
9. Viết chương trình to mt mng các s phc. y viết hàm tính tng, tích các s
phc có trong m ng.
10. Viết chương trình tạo mt mng các phân s. Hãy viết hàm thc hin các công
vic sau :
a) Tính tng t các phân s t qu ng phân s t n) t c (kế dưới d i gi
b) Tìm phân s l n nh t, phân s nh nh t.
c) Sp x p m ế ảng tăng dần.
11. T chc d liệu để qun sinh viên bng cu trúc mu tin trong mt mng N
phn t , m i ph n t có c ấu trúc như sau:
- Mã sinh viên.
- Tên.
- Năm sinh.
- Điểm toán, lý, hoá, điểm trung bình.
Viết chương trình thực hin nhng công vic sau:
Bài t p K p trình thut l Trang 3/30
a) Nhp danh sách các sinh viên cho m p h c. t l
b) Xut danh sách sinh viên ra màn hình.
c) Tìm sinh viên có đim trung bình cao nht.
d) S p x p danh sách lế p theo th t n c m trung bình. tăng dầ ủa điể
e) Sp x p danh sách lế p theo th t gi m d n c m toán. ủa điể
f) Tìm ki m trung bình lếm in ra các sinh viên điể ớn hơn 5
không có môn nào dưới 3.
g) Tìm sinh viên có tui ln nh t.
h) Nhp vào tên c a m t sinh viên. Tìm in ra các thông tin liên quan
đến sinh viên đó (nếu có).
12. T chc d liu qu n lí danh m c các b phim VIDEO, các thông tin liên quan
đến b phim này như sau:
- Tên phim (t a phim).
- Th loi (3 lo i : hình s , tình c m, hài).
- Tên đạo di n.
- Tên điễn viên nam chính.
- Tên din viên n chính.
- Năm sản xut.
- Hãng sn xu t
Viết chương trình thực hin nhng công vic sau :
a) Nhp vào b phim m i cùng v n b phim ới các thông tin liên quan đế
này.
b) Nhp m t th i: In ra danh sách các b lo phim thuc th i này. lo
c) Nhp m t tên nam di n viên. In ra các b phim có di óng. ễn viên này đ
d) Nhập tên đạ phim do đạo din. In ra danh sách các b o din này dàn
dng.
13. Một thư việ các đầ ỗi đần cn qun lý thông tin v u sách. M u sách bao gm các
thông tin sau : MaSSach (mã s sách), TenSach (tên sách), TacGia (tác gi ), SL (s
lượ ng các cu n sách của đ c năng sau: u sách). Vi c hiết chương trình thự n các ch
a) Nhp vào m u sách (t u sách) ột danh sách các đầ ối đa là 100 đầ
Bài t p K p trình thut l Trang 4/30
b) Nhp vào tên c a quy v các sách có tên ển sách. In ra thông tin đầy đủ
đó, nế ển sách đó thì báo u không có thì tên ca quy là: Không Tìm Thy
c) Tính tng s n. sách có trong thư việ
14. Viết chương trình to mt mng danh sách các máy tính ca mt ca hàng,
thông tin c m : a m t máy tính bao g
- Loi máy
- Nơi sản xut
- Thi gian b o hành
a) Viết hàm nh p m t dãy các lo i máy tính có thô ng tin như trên.
b) Hãy vi t hàm th ng xem có bao nhiêu máy thế i gian b o hành
1 năm.
c) In ra danh sách các máy tính có xut x t M .
15. Để lp ráp mt máy vi tính hoàn ch nh cn phi có ti thiu 10 linh kin loi A
th l p b sung thêm vào kho ng t n lo i B. T i m t c a hàng ối đa 8 linh kiệ
vi tính c n qu n bán hàng các lo i linh ki n t i c a hàng. Thông tin v m t lo i
linh ki n g m có: Tên linh ki n, quy cách, lo i 1 (ch ng t s ại, đơn giá loạ ất lượ t
nguyên), đơn giá loạ ất lượ ết chương trình thựi 2 (ch ng thường s nguyên). Vi c
hin nh ng công vi c sau :
a) Nhp vào thông tin v n có c a hàng. các linh ki
b) Xut danh sách các linh ki p theo th t n cện đã nhậ tăng dầ a lo i linh
kin và tên linh ki n.
c) Cho biết đã có đủ 10 linh kin loi A cn thi t l ế ắp ráp máy hay chưa?
16. Mt ca hàng cn qu n lý các m t hàng, thông tin m t m t hàng bao g m:
- Mã hàng.
- Tên m t hàng.
- S lượng.
- Đơn giá.
- S lượng t n.
- Thi gian b tháng). ảo hành (tính theo đơn vị
Hãy nh p vào m t danh sách các m t hàng.
a) Tìm m t hàng có s ng t n nhi u nh lượ t.
Bài t p K p trình thut l Trang 5/30
b) Tìm m t hàng có s lượng tn ít nh t.
c) Tìm m t hàng có giá ti n cao nh t.
d) In ra nhng mt hàng có thi gian b o hành l ớn hơn 12 tháng.
e) Sp x p các m t hàng theo th t n c a s ế tăng dầ lượng t n.
17. Viết chương trình to tp tin nh phân cha 10000 s nguyên bt k ghi vào file
SONGUYEN.INP, m i dòng 10 s . S c file au đó viết chương trình đọ
SONGUYEN.INP, s p x p theo th t t qu vào file ế tăng dần lưu kế
SONGUYEN.OUT.
18. Viết chương trình t ẫu nhiên đôi mộo mt file cha 10000 s nguyên ng t khác
nhau trong ph m vi t 1 đến 32767 và đặt tên là “SONGUYEN.INP”.
19. Viết chương trình to mt file cha các s nguyên tên SONGUYEN.INP.
Sau đó đọc file SONGUYEN.INP ghi c s chn vào file SOCHAN.OUT
nhng s l vào file SOLE.OUT.
20. Viết chương trình ghi vào t 0 đếp tin SOCHAN.DAT các s nguyên chn t n
100. Vi c t p tin SOCHAN.DAT xu t ra màn hình, m i dòng ết chương trình đ
30 s .
Bài t p K p trình thut l Trang 6/30
CHƯƠNG 2: K THUT T CHC X D LIU TRÊN
MNG 1 CHIU, 2 CHI U
Trình độ nhp môn
1. Tìm m trong m t m ng b ng lính canh. t s
2. Tìm m trong m t m t (tìm nht s ảng đã có thứ phân).
3. Viết các th t c thêm, xóa, s a, tìm ki m m t ph n t trong m t m ng. ế
4. Viết hàm chuy n m t m ng hai chi u thành m t m ng m t chiu.
5. Viết hàm chuy n m t m ng m t chi u MxN ph n t sang m t m ng 2 chi u
kích thước MxN.
6. Thc hi n ghép 2 m ng m t o m ng C theo nguyên t c t ng ph n t chiều A, B để
t c a m ng A xen k t ng ph n t c a m ng B.
7. Thc hin xóa b kho ng tr ng th a và vi u t m t chu i ký t ết hoa đầ cho trước.
8. Cho ma tr c MxN (0<M,N<100) ch a các s c nhận A kích thướ th hơn 100000.
Mt điểm X
i,j
được g m l i n i, trái, ọi điể ếu như lớn hơn cả 4 điểm trên, dướ
phi ca nó.
Yêu cu: Tìm X i có giá tr nh a m ng.
min
là điểm l nht c
D liu vào: Được nhp t bàn phím có c ấu trúc như sau:
+ Dòng đầu tiên hai s nguyên dương M, N biể ễn kích thướu di c ca ma
trn A (M dòng, N c t).
+ M dòng ti p theo, m i dòng N s c (m i s cách nhau ít nh t mế th t
khong tr ng) l t là N ph n t c ng c a ma tr n. ần lượ a từng dòng tương ứ
D liu ra: Xut ra màn hình m t dòng duy nh t g m 2 s nguyên I, J l ần lượt
ch s dòng ct c a X u tiên t trên xu ng t trái qua ph i. N
min
đầ ếu
không có điểm li nào thì xut ra là -1.
Ví d:
D u vào D u ra li li
3 4 1 2
3 5 6 9
4 6 7 8
8 7 11 10
9. Nhp vào m t s d ng th p phân, chuy n sang d ng nh phân, bát phân, thp lc
phân.
Bài t p K p trình thut l Trang 7/30
10. Nhp vào d, m, y, ki m tra (d,m,y) l p thành m ột ngày tháng năm hay không,
nếu có xu t ra ngày ti p theo. ế
K thut lp trình
11. Tính tng, hi u 2 s nguyên l n.
Hướng dn:
- S dng ki u d liu chu i (m ng ký t ) cho t ng s nguyên.
- Làm bài tính tổng trướ ừng trườc, làm được mi tính hiu, x lý t ng hp 2
s có độ dài bằng nhau, độ dài khác nhau
12. Lp ma tr n giá tr bãi mìn cho trò chơi Minesweeper.
13. Cho các s 1, 2, 3, 4, 5 t u b t ch n ổng S ban đ ằng 0. 2 người chơi lần lượ
mt trong các s đã cho theo nguyên tắc không được s người kia va chn
trước đó, mỗ ọn đềi ln ai ch u cng dn vào tng S.
Ví d i A ch n 2 v y S=0+2=2. ụ: Ban đầu ngườ
Tiếp th i B ch c ch c ch n 2), d n 4, eo ngườ đượ ọn 1, 3, 4, 5 (không đượ ch
vy S=2+4=6.
Tiếp theo A ch c ch c ch n l c ch đượ ọn 1, 2, 3, 5 (đư ại 2 nhưng không đượ n
4), ví d n 5. V y S=6+5=11. ch
Tiếp theo B ch c ch c ch n 5 vì A m i v a ch n 5), đư ọn 1, 2, 3, 4 (không đượ
ví d n 2. V ch y S=11+2=13….
Ai làm cho t ng S l i máy sao cho ớn hơn 35 thua. Lập trình cho người chơi v
kh ng c a máy là cao nh năng thắ t.
Hướng d n: Trò chơi được gi i quyết b p b ằng phương pháp L ảng phương án.
14.
Viết chương trình in ra các số 1 đế ới N đượ nguyên t n N theo hình xo
2
n c v c
nhp vào t bàn phím. Ví d , v 4 ta có: i N=
1
2
3
4
12
13
14
5
11
16
15
6
10
9
8
7
Bài t p K p trình thut l Trang 8/30
15. (Ma tr n k o Ma phương) ), Viết p vào s t nhiên N (N lchương trình nhậ
sau đó điề 1 đế
n các s t n n vào trong m
2
t bng vuông sao cho tng các hàng
ngang, hàng d u b ng nhau. ọc và 2 đường chéo đề
Hướng dn: M t trong nhi u cách gi i ải là như bên dướ
16.
( ). Cho k n 2 s viên s c phân Bài toán d n s i nguyên dương, 2
k
ỏi, đượ
b trong n đống. Ngư ắc dưới đây) lượi ta cn san s (theo quy t ng si t các đống
để dn s i tr v một đố ỏi như sau: mỗng. Quy tc san s i ln san áp dng cho hai
đống si, gi s rng m ng có a viên s ng kia có b viên st đố ỏi và còn đố i (không
gim t ng quát, gi thiết a, b) thì cho phép san (thay đổi s lượng t hai đống) n
sau: đống a viên (đố ỏi không thua đống s s ng còn li) s a - b viên, còn
đống b tr thành 2*b viên.
Hãy tìm cách san s ng s viên.
i để cuối cùng còn 1 đố i vi 2
k
17. (Bài toán b c s i t ng s hai đố i). Cho 2 đố ột đống si, m ng a viên si, còn
đóng kia b viên sỏi (a, b > 0). Hai đấ ần lượt chơi trò bố ỗi lượt đi u th l c si, m
mỗi ngườ i đư c quy n b c theo quy tc:
- Ít nht phi b c 1 viên ốc đượ
- Hoc b c m ng s i b t k t m ng, ho c b c cùng m ng s ột lượ ột đố ột lượ i
như nhau ở hai đố ếu đã bố hai đố ng (n c si ng).
Đấu th đến lượt đi mà không còn sỏ ốc thì coi như thua cuội để b c.
Tìm chi ng ến lược đi để ngườ i trư c th
Bài t p K p trình thut l Trang 9/30
18. Cho n là s t c m t dãy g m n ô liên ti p nhau, m i ô ho nhiên. Cho trướ ế ặc được
đánh dấ ặc không được đánh dấu ho u ch mt trong hai trng thái nói trên
thôi. Một trò chơi hai đấu th được mô t như sau:
Đầu tiên, toàn b u, n ô chưa bị đánh dấ
Hai đấu th luân phiên nhau đánh dấu vào các ô trong dãy theo quy t c:
o Hoc ch u vào m t ô, ho u vào hai ô liên ti p nhau đánh dấ ặc đánh d ế
chưa bị đánh dấ u.
o Người đến lượt đi mà không còn ô chưa đánh dấu là b thua.
Hướng dn:
Trng thái k u, ết thúc: mọi ô đã bị đánh dấ
Tp tr ng thái thua: Các mi n (mi c hi m dãy liên ền đượ u theo nghĩa (1) g
tục các ô chưa đánh dấu, (2) ô bt k, nếu có, ph i b đánh d c) có thấu trướ
ghép thành các c p gi ng h t nhau:
o S miền có 1 ô chưa đánh du là chn; s miền có 2 ô chưa đánh du
là chn.
o Chiến lược đi để người đầ u tiên thng:
Tại bước đi đầu tiên: nếu n l đánh dấu vào ô có th t (n div
2)+1” nế ẵn đánh dấu n ch u hai ô (n div 2) và (n div 2)+1.
(Sau đó đố đi trưi th c một bước),
Mỗi bướ ột “bước đi đố ứng” với bưc tiếp theo s chn m i x c
đố ừa đi "Đố đây qua trục đi th v i xng" i xng ca
dãy.
d , v i n = 9 n i th i th ếu đố xoá đi ô 3 thì ta xóa ô 7, nếu đố xóa đi 2 ô 1
và 2 thì ta xóa 2 ô 8 và 9 v.v. V i n=10, n i th xóa ô 3 thì ta xoá ô 8, n i th ếu đố ếu đ
xóa hai ô 1 và 2 thì ta xoá 2 ô 9 và 10 v.v..
Sau m a ta, trình tr ng c i x ng v y, hoỗi bước đi củ ủa y tính đố ặc đối
th g p tr ng thái k t thúc, ho ế ặc ta luôn còn nước đi.
Chú ý:
th m t tr ng thái b t k t s đặt ra bài toán khó hơn: T (m ô đã bị đánh
du, còn các ô còn l khại thì chưa), y tìm chiến lược đi để năng người đi trưc
thng cao nh t th gi i c ng h p trên, chi được. Tương tự ủa trườ ến lược đi
Bài t p K p trình thut l Trang 10/30
đúng đị ống đốnh hướng ti vic to ra các tình hu i th vào trng thái thua có th được;
nếu không đưa về “gần tr i thạng thái thua hơn” và không để đố bu c ta vào tr ng thái
thua. Mt s n v y: ý tưởng liên quan đế ấn đề
- S d ng khái ni c g m ”miền” trước đây. Hai miền khác nhau đư ọi đi
cp v i nhau n u chúng cùng s ế lượng ô.
- Sau khi đã ghép đượ ền chưa được các cp, còn mt s mi c ghép cp: hãy
kh s n theo ki u này song chú ý ch mi nên t u ki i th buạo điề ện cho đố ộc ta rơi
vào tr ng thái thua.
19. Cho m, n là hai s t c m t b ng hai chi u g m m dòng, m i dòng nhiên. Cho trư
n c t các ô, m u ho u ch m ỗi ô được đánh dấ ặc không được đánh dấ t
ttrong hai trng thái nói trên mà thôi. M u th c mô t ột trò chơi hai đấ đượ như sau:
Đầu tiên toàn b m x n ô ca bng u. chưa bị đánh dấ
Hai đấ u th luân phiên nhau đánh dấu các ô trong dãy theo quy t c sau:
o Ch đánh dấu vào các ô chưa bị đánh du.
o Đánh dấ 1 ô đến 4 ô chưa bị đánh dấ ận đu t u k c nh (hay cnh)
và n m tr n trong m t hình vuông có c nh dài không quá 2.
Ngườ i đến lượt đi mà không còn ô chưa b đánh dấu để đi tiế p là b thua.
Tìm chi c luôn th ng. ến lược đi để ngườ i đi trư
Hướng dn:
Hoàn toàn th s d ng thu i x ng c gi i bài này. ật toán đi đố ủa bài trên để
th m r bài toán 3 song c qu n các mi n khó ộng bài toán như đã làm vi
khăn hơn rất nhiu.
Bài t p K p trình thut l Trang 11/30
20. Lp ma tr n k o theo cách khác bài 15 ng d theo như hướ ẫn bên dưới.
Hướng dn:
Ví dụ: Với N=3 và N=5 ta có
2
7
6
3
16
9
22
15
9
5
1
20
8
21
14
2
4
3
8
Tây
7
25
13
1
19
Đông
24
12
5
18
6
11
4
17
10
23
- Xut phát t ô bên phải của ô nằm giữa. Đi theo ng đông bc đ đin các s 1, 2, ...
- Khi đin số, cần chú ý mt số nguyên tắc sau:
Nếu vưt ra phía ngoài bên phi của bảng thì quay tr li ct đu tn.
Nếu vưt ra phía ngoài bên trên của bảng t quay tr li dòng cui 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 vi k nhưng cách 1 ô v phía bên phải.
Bài t p K p trình thut l Trang 12/30
CHƯƠNG 3 TINH CH: ỈNH CHƯƠNG TRÌNH
Trình độ nhp môn
1.
Nhp x và p, tính x
p
.
2.
Tính S(n) = 1 + (1+2) + (1+2+3)+…+(1+2+3+…+n) ) (n<10
6
3. Tính
1 1 1
( ) 1
1 2 1 2 3 1 2 3 ...
S n
n
4. Tính S(n) = 1 + (1x2) + (1x2x3)+…+(1x2x3x…xn)
5. Tính
1 1 1
( ) 1
2! 3! !
S n
n
6. Tính
2
1
1! 2! !
n
x
x x x
e
n
v i x và n cho trư c
7. Tính giá tr ph n t n c a dãy Fibonacci (không dùng m th ng).
8. Nhp s c A (0<A<4), tìm n nh nh t th a th
A
n
1
...
3
1
2
1
1
9. Nhp vào m t m ng các s nguyên.
a/ Xếp lại mảng đó theo thứ tự giảm dần.
b/ Nhập vào một số nguyên từ bàn phím. Chèn số đó vào mảng sao cho mảng
vẫn có thứ tự giảm dần. (không được xếp lại mảng)
10. (Phân lo i t ) Cho m t chu i t , hãy phân lo i m i t theo 4 ki u sau:
kiu ch thường, ki u ch hoa, ch s ki c các t không ểu “khác” (tứ
thuc ba loi trên).
K thut lp trình
11. Viết c hi n phép nhân 2 s nguyên l n (t 50-100 ch s ) chương trình thự
12.
Tính S(n) = 1 + (1+2) + (1+2+3)+…+(1+2+3+…+n) ) (n<10
10
13. Viết chương trình sắ ếp tăng mộp x t mng có n phn t ch gm các s 1,2 và 3 sao
cho th c hi n ít phép hoán v nh t.
Bài t p K p trình thut l Trang 13/30
14.
Tính S = A
0
+ A x + A
1 2
x
2
+ … + A
n
x
n
Hướng dn: Chương trình dưới đây dùng 2n phép tính nhân
S = A[0];
xi=1;
for (int i=1; i<=N;i++)
{
xi = xi*x;
S = S + A[i]*xi;
}
Liu có cách vi t nào t ế ốt hơn (chạy nhanh hơn) không?
15. Biết giai th a c a n, kí hi t s ệu: n! = 1 x 2 x 3 x … x n. Cho mộ nguyên dương n.
Hãy cho bi a c s bên ph i. ết giai th a n có bao nhiêu ch ‘0’ ở
Ví d: 5! = 1 x 2 x 3 x 4 x 5 = 120 có 1 ch s bên ph ‘0’ ở i.
16. Cho một chuỗi S chỉ gồm các tự < > chiều dài n (n<=1000). Yêu cầu:
Hãy chèn n+1 số nguyên dương vào sao cho ta có bất đẳng thức đúng sao cho số
nguyên lớn nhất Tmax trong n+1 số này nhỏ nhất. ết chương trình nhậ Vi p vào
chui Sxu S sất ra Tmax như trên. dụ: = ><>< cho ra bất đẳng thức đúng
như sau: 2>1<2>1<2. Vy Tmax=2.
17. (Dãy các s 1 ) Cho m t s nguyên n b t k t cho 2 (0≤n≤10000), n không chia hế
không chia h t cho 5. H i ít nh t bao nhiêu ch s trong dãy các s 1 sao ế
cho (dãy) s đó chia hết cho n.
18. Viết p vào m t s nguyên n, xu t ra m t s nguyên x >0 nh nhchương trình nhậ t
sao cho p=
1
0
101
x
i
i
x
, v p=nxb và b là m t s . i nguyên dương
Ví d : n=3 x=3, n=7 => x=6, n=9901 => x=12 =>
19. Tính
2 2 2
1 1 1
( ) (1 )(1 )...(1 )
1 2
S n
n
Bài t p K p trình thut l Trang 14/30
BUI 4: PHƯƠNG PHÁP DUYT
Trình độ nhp môn
1. Tìm giá tr nh nht ca các phn t trong mt mng mt chiu.
2. Tính tng các ph n t trong m ng m t chiu.
3. Tính n!
4. Viết chương trình tìm nhị phân (viế t đ quy)
5.
Tính C
k
n
6. Tính giá tr ph n t n c a dãy Fibonacci (không dùng m ng) th
7. Tính tng giá tr các s nguyên có trong mt chu i ký t.
Ví d: Chu i 2AS34ASDF342B có t ng là 2+34+342=378
8. Tìm s nguyên t nh nh ng. t trong m
9. Tìm UCLN ca tt c các phn t trong mng.
10. Tìm ph n t có t n s xu n nhi u nh t trong m t m t hi ng.
K thut lp trình
11. Lit kê t t c các dãy nh dài n. phân có độ
12. Lit kê t t c t p con c p n ph n t a t
13. Lit kê t t c hoán v c p n ph n t a t
14. Cài đặt bài mã đi tuần
15. Cài đặt bài Tháp Hà Ni.
16. Cài đặt bài toán 8 con hu.
17. N thành ph t n N-1. M i du l ch xu t phát t mố, đưc đánh số 0 đế ột ngườ t
thành ph khác, m i thành ph t l n r i quay muốn đi thăm các thành phố đúng mộ
v nơi xuất phát. Chi phí đi t thành ph i đến thành ph j là A[i][j], (0 ≤ i,j < N).
Hãy tìm m du l t ng chi phí theo hành trình y là ít ột hành trình cho người ịch để
nht.
18. N chi ti t n N-1 c c gia công. Các chi ti t th ết được đánh số 0 đế ần đượ ế
hoàn thành trên m t máy A ho c trên m t máy B. Các máy y th ho ng ạt độ
độ c lp và làm vi ng thệc đồ i. Biết rng thi gian gia công chi tiết i trên máy A
A[i] và trên máy B là B[i]. Hãy tìm một phương án phân công cho các máy để thi
gian hoàn thành c N chi ti m nh ết là s t.
Bài t p K p trình thut l Trang 15/30
19. Mt dãy d u ngo c h p l là m t dãy ký t “(“ và “)” đượ nh nghĩa như sau:c đ
- Dãy r ng là 1 dãy d u ngo p l sâu là 0. c h độ
- Nếu A là dãy d u ngo sâu k thì (A) là dãy d u ngo c h p l sâu k + 1 ặc độ độ
- Nếu AB là hai y d u ngo c h p l v sâu l t p q thì AB ới độ ần lượ
là dãy d u ngo p l sâu là max (p,q) c h độ
- Độ dài c a 1 dãy ngo c là t ng s ký t “(“ và “)”.
Hãy li t kê 1 dãy d u ngo p l sâu n. c h có độ dài m và độ
D liu vào
D liu ra
8 3
((()()))
((())())
((()))()
(()(()))
()((()))
20. Cài đặt bài hình vuông Latinh (là hình vuông dòng đ ột đu c u gm các s
t 1 đế ột đền n. Trên mi dòng và mi c u mt hoán v ca các phn t t 1 đến
n.
Bài t p K p trình thut l Trang 16/30
CHƯƠNG 5: GI I THU T SINH
Trình độ nhp môn
1. Đổ i tt c các s thp phân t n n sang h1 đế nh phân.
2. Viết hàm tính t ng các ph n t s Amstrong (là s k có đặc điểm như sau: số
ký s , t a các ký s b ng chính s ổng các lũy thừa b c k c đó).
Ví d
: 153 là s có các ký s 1 =153
3
+5 +3
3 3
3. Viết chương trình tìm số ất nhưng lớn hơn mọ l nh nh i s chn trong mng.
4. Viết hàm th n các thao tác trên bit (b t, t y giá trc hi t, l bit th i c a biến n).
5. Viết bitcount đế ượ m s l ng bit 1 ca m t s nguyên dương n.
6. Cho hàm F(n) v ới n nguyên không âm được xác định như sau:
F(0)=0, F(1)=1, F(2n)=F(n), F(2n+1) = F(n) + F(n+1).
Viết chương trình tính F(n).
7. Viết chương trình xuấ hơn n theo thut ra tt c các s nguyên t nh t toán sàng
Eratosthène.
8. Viết chương trình kiểm tra mt chu i có đ i xng không?
9. Viết chương trình nhập vào ma trn A[M N], hãy xu][ t ra màn hình các phn t
A[i][j] sao cho A[i][j] là ph n t có giá tr l n nh nh t dòng i và nh t ct j.
K thut lp trình
10. Sinh tt c các dãy nh dài n. phân có độ
11. Sinh tt c t p con c a t p n ph n t .
12. Sinh tt c hoán v c a t p n ph n t .
13. Viết chương trình sinh tấ cho trướt c t hp chp k ca n phn t c.
14. Chú lùn Hugo đang bị lc vào mt cung hình ch nht gm M dòng và N ct,
M, N≤100. Các dòng (cột) đánh số 1 đế 1 đế t n M (t n N) t trên xung (t trái
sang). Hugo đang đ ỗi bướng ô (X,Y). T mt ô bt k, trong m c di chuyn,
Hugo th di chuy n 1 trong 8 ô chung quanh. M i ô c a cung ng v ển đế i
mt s trong ph n 255 v nh nh ng Hugo có th di ạm vi 0 đế ới ý nghĩa quy đị ững hướ
chuyn t ô đó. Quy định đó như sau:
Gi s bi u di n v i 8 bit c a s t ng (ghi ch H) ại ô Hugo đang đứ
b b b b b b
0 1 2
b
3 4 5
b
6 7
, ta đánh số các ô chung quanh ô đó vớ ới 0≤I≤7, i các s 7..0, v
Hugo di chuyển theo hướng I nếu và ch nếu bit b =1.
i
Bài t p K p trình thut l Trang 17/30
Hãy ch cho Hugo m t hành trình qua ít ô nh th thoát khYêu cu: ất để i
cung n u th . Chú ý r ng Hugo th di chuy n ra mế ột ô biên nhưng từ ô
biên đó Hugo không đi ra ngoài mê cung đưc.
D liu: Vào t nh t ghi 2 s N, ti file HUGO.INP trong đó dòng th M, ếp
theo là M dòng, dòng th I ghi N s ng v i các ô dòng th I c a mê cung. tương
Dòng cui cùng ghi 2 s X,Y.
Kết qu: Ghi ra file HUGO.OUT như sau: dòng th nht ghi s nguyên không
âm C C=0 n u Hugo không ra kh c, n nh sế ỏi cung đượ ếu C>0, đó chí ô
trên hành trình Hugo đi ra khi cung. Nếu C>0, trong C dòng tiếp theo, mi
dòng ghi ch s dòng và ch s c t c a m t ô l t trên hành trình c a Hugo b ần lượ t
đầ u t ô (X,Y) cui cùng ô trên biên t ô đó Hugo th ra kh i
cung.
Ví d:
HUGO.INP
HUGO.OUT
5 6
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
3 4
3
3 4
4 4
5 4
15. Viết chương trình sinh tất c chnh hp chp k ca n phn t cho trưc.
16. In ra theo th t n t các phân s t n 0<m/n<1 v i m u s tăng dầ t c i gi ≤10
17. Cho hàm F(n) v ới n nguyên không âm được xác định như sau:
F(0)=0, F(1)=1, F(2n)=F(n), F(2n+1) = F(n) + F(n+1).
Viết chương trình tính F(n) với đi ảng độu kin không dùng m dài N.
18. Hãy li t kê t t c các dãy nh s n phân độ dài n mà trong đó cụm ch “01” xuất hi
đúng 2 lần.
19. Lit t t c các cách phân tích s ng các s nguyên nguyên dương n thành tổ
dương, hai cách phân tích là hoán v ca nhau ch tính là mt cách.
Bài t p K p trình thut l Trang 18/30
BUI 6 QUY HO: CH ĐỘNG
Trình độ nhp môn
1. Đổ i tt c các s thp phân t 1 đến n sang h nh phân.
2. Tính
!
!( )!
k
n
n
C
k n k
v n 20. i 0 k
3. Viết chương trình xuất ra n phn t đầu tiên ca dãy Fibonacii
4. Viết hàm xóa các ph trùng nhau trong dãy, chn t gi li m t phn t trong đó. Ví
d: 1 2 3 2 1 2 4 - 1 2 3 4 >
5. Viết chương trình tính tích của 2 ma trn
6. Viết chương trình đế ảng con tăng dầm và lit các m n trong mng mt chiu các
s nguyên.
Ví dụ: 6 5 3 2 3 4 2 7 các dãy con tăng dần là 2 3 4 và 2 7
7. Viết chương trình tìm mảng con tăng dần có tng ln nht trong mng mt chiu.
8. Viết chương trình in ra tam giác Pascal
9. Viết chương trình đếm s ln xut hin ca tng loi ký t trong m t chu i.
10. Viết chương trình đảo ngư được định nghĩa c các t trong mt chui, mi t
cách nhau ít nht m t ký t ng. Ví d : tr
“TU DO HANH PHUC” “UT OD HNAH CUHP” ->
K thut lp trình
11. (Bài toán m dãy con đơn điu dài nht). Cho N s , a nguyên dương, dãy a
1 2
,…a ,…a
n
gm các s thực. Tìm trong dãy đó có một dãy con a , a
i1 i2 ik
ca dãy trên
thoã mãn điều kin:
i) a
ij
≤ a
ij+1
ii) i
j
≤ i
j+1
iii) Không có dãy con nào tho tính ch u ph n t t i) & ii), mà có nhi hơn.
Bài t p K p trình thut l Trang 19/30
Hướng dn:
Đặt A
0
=
-∞ và A
n+1
=
∞.
Gọi L[i] là đ dãy con tăng dài nhấ dài t ca các phn t ly trong min
t A
i
đến A ph n t
n+1
đầu c . Ta có công th tính ủa dãy tăng là A
i
ức QHĐ để
L[i] như sau:
+ L[n+1] = 1
+ L[i] = max(L[j]) + 1 v i i<j<n+1 và Ai m
i
≤ A
j
12. (Xâu con chung dài nht) Cho hai n X Y dài n m trong xâu n bả độ
khong t n 100. Sâu Z 50 đế được gọi là “xâu con chung“ của X và Y nếu Z nhn
được t X (hoc Y) bng cách loi b mt s t nào đó. d nếu
X=”AdksHKoiGAdksHKoiG” Y=”ADKSHKOIGADKSHKOIG” thì
Z=AHK m t con xâu chung c X Y. Hãy tìm xâu con chung l a n nh t có
th được (trong ví d trên Z c ực đại s là “AHKGAHKG)
Hướng dn:
Gọi L[i][j]độ dài xâu con chung dài nht ca xâu X[i] gm i t phn
đầ u ca X và xâu Y[j] g m j kí t ph u cần đầ a Y.
Ta có công th ức QHĐ như sau:
+ L[0][j]=L[i][0]=0
+ L[i][j]=L[i-1][j-1] + 1 n u X[i]=Y[j] ế
+ L[i][j]=max(L[i-1][j], L[i][j-1]) n u X[i]<>Y[j] ế
13.
Tính các ph n t c a m ng C[n][k] = C
k
n
= s t h p ch p k c a n ph n t , v i 0
k n 20.
Bi
ết C
o
n
= C
n
n
= 1 C
k
n
= C
k-1
n-1
+ C
k
n-1
Bài t p K p trình thut l Trang 20/30
Hướng dn:
Tính nghim của bài toán trong trườ ợp riêng đơn giảng h n nht.
for (i=1;i<=n;i++)
{
C[0][i] = 1;
C[i][i] = 1;
}
Tìm các công quy bi u di n nghi m t a bài toán l n thông qua thức đệ ối ưu củ
nghim tối ưu của các bài toán con.
for (i=2;i<=n,i++)
for (j=1;i<i,j++)
C[i][j] = C[i-1][j-1] + C[i-1][j];
C[n][k]
0
1
2
3
4
5
1
1
1
2
1
2
1
3
1
3
3
1
4
1
4
6
4
1
5
1
5
10
10
5
1
Có th c i ti n: dùng 2 m ng m t chi u thay cho 1 m ng hai chi u. ế
14. Cho n món hàng (n 50). Món th i có kh ng là A[i] (s nguyên). C n ch n ối lượ
những món hàng nào để ối lư b vào mt ba sao tng kh ng ca các món hàng
đã chọ ất nhưng không ối lượng W cho trướn ln nh t quá kh c. (W 100).
Mi món ch n 1 ho n. ch c không ch
Input:
n W
A[1] A[2] … A[n]
Ví dụ:
4 10
5 2 4 3
OutPut:
Tổng khối lượng của các món hàng bỏ vào ba lô.
Khối lượng của các món hàng đã chọn.
| 1/30

Preview text:

CHƯƠNG 1: K I U D L
I U CÓ CU TRÚC N
H P XUT D L I U TRÊN TP TIN
1. Cho một lớp học gồm n học sinh (n≤50). Thông tin của một học sinh được định
nghĩa theo kiểu dữ liệu của học sinh HOCSINH gồm:
• Mã số học sinh (MSHS): chuỗi có tối đa 5 ký tự.
• Họ tên (hoten): chuỗi có tối đa 30 ký tự.
• Ngày tháng năm sinh (ngaysinh): kiểu DATE.
• Địa chỉ (diachi): chuỗi có tối đa 50 ký tự.
• Giới tính (phai): chuỗi có tối đa 3 ký tự.
• Điểm trung bình (diemtb): số thực.
Hãy viết chương trình nhập và xuất danh sách học sinh sau đó đếm xem có
bao nhiêu học sinh được lên lớp (Điều kiện được lên lớp là điểm trung bình ≥ 5.0). Hướng dn:
- Trước hết ta phi xây dng hàm nhp và xut cho 1 hc sinh.
- Xây dng hàm nhp và xuất ngày tháng năm (Kiểu d liu DATE).
- Sau đó mới xây dng hàm nhp và xut cho danh sách hc sinh.
2. Cho một mảng các phân số (PHANSO) gồm n phần tử (n≤50). Hãy viết chương
trình nhập và xuất danh sách các phân số sau đó tìm phân số có giá trị lớn nhất,
tổng và tích các phân số và nghịch đảo giá trị các phân số trong mảng. Hướng dn:
- Trước hết ta phi xây dng hàm nhp và xut cho 1 phân s.
- Xây dng hàm tính tng, hiệu, tích, thương, rút gọn, so sánh và
nghịch đảo cho 2 phân s.
- Sau đó mới xây dng hàm nhp, xut, tính tng, tích cho mng các phân s.
3. Viết chương trình nhập vào 2 struct THOIGIAN (gồm giờ, phút, giây). Kiểm tra
thời gian nhập vào có hợp lệ không, nếu hợp lệ thì xuất ra khoảng cách giữa 2 mốc thời gian trên.
4. Viết chương trình nhập vào 2 struct DATE (gồm ngày, tháng, năm), kiểm tra ngày
nhập vào có hợp lệ hay không, nếu có thì xuất ra khoảng cách giữa 2 ngày.
Bài tập Kỹ thuật lập trình Trang 1/3 0
5. Viết chương trình khai báo kiểu dữ liệu thể hiện một số phức. Sử dụng kiểu này để
viết hàm tính tổng, hiệu, tích của hai số phức.
6. Viết chương trình khai báo kiểu dữ liệu để biểu diễn một phân số. Hãy viết hàm
thực hiện những công việc sau:
a) Tính tổng, hiệu, tích, thương hai phân số. b) Rút gọn phân số.
c) Qui đồng hai phân số. d) So sánh hai phân số.
7. Viết chương trình khai báo kiểu dữ liệu để biểu diễn một hỗn số. Hãy viết hàm thực
hiện những công việc sau :
a) Đổi hỗn số sang phân số
b) Tính tổng, tích hai hỗn số
8. Viết chương trình khai báo kiểu dữ liệu để biểu diễn một điểm trong hệ tọa độ 0xy
. Hãy viết hàm thực hiện các công việc sau:
a) Tìm những điểm đối xứng của nó qua tung độ, hoành độ, toạ độ tâm.
b) Hãy tính tổng, hiệu, tích của hai điểm trong mặt phẳng toạ độ 0xy.
c) Tính khoảng cách giữa hai điểm .
9. Viết chương trình tạo một mảng các số phức. Hãy viết hàm tính tổng, tích các số phức có trong mảng.
10. Viết chương trình tạo một mảng các phân số. Hãy viết hàm thực hiện các công việc sau :
a) Tính tổng tất cả các phân số (kết quả dưới dạng phân số tối giản)
b) Tìm phân số lớn nhất, phân số nhỏ nhất.
c) Sắp xếp mảng tăng dần.
11. Tổ chức dữ liệu để quản lí sinh viên bằng cấu trúc mẫu tin trong một mảng N
phần tử, mỗi phần tử có cấu trúc như sau: - Mã sinh viên. - Tên. - Năm sinh.
- Điểm toán, lý, hoá, điểm trung bình.
Viết chương trình thực hiện những công việc sau:
Bài tập Kỹ thuật lập trình Trang 2/3 0
a) Nhập danh sách các sinh viên cho một lớp học.
b) Xuất danh sách sinh viên ra màn hình.
c) Tìm sinh viên có điểm trung bình cao nhất.
d) Sắp xếp danh sách lớp theo thứ tự tăng dần của điểm trung bình.
e) Sắp xếp danh sách lớp theo thứ tự giảm dần của điểm toán.
f) Tìm kiếm và in ra các sinh viên có điểm trung bình lớn hơn 5 và
không có môn nào dưới 3.
g) Tìm sinh viên có tuổi lớn nhất.
h) Nhập vào tên của một sinh viên. Tìm và in ra các thông tin liên quan
đến sinh viên đó (nếu có).
12. Tổ chức dữ liệu quản lí danh mục các bộ phim VIDEO, các thông tin liên quan
đến bộ phim này như sau: - Tên phim (tựa phim).
- Thể loại (3 loại : hình sự, tình cảm, hài). - Tên đạo diễn.
- Tên điễn viên nam chính.
- Tên diễn viên nữ chính. - Năm sản xuất. - Hãng sản xuất
Viết chương trình thực hiện những công việc sau :
a) Nhập vào bộ phim mới cùng với các thông tin liên quan đến bộ phim này.
b) Nhập một thể loại: In ra danh sách các bộ phim thuộc thể loại này.
c) Nhập một tên nam diễn viên. In ra các bộ phim có diễn viên này đóng.
d) Nhập tên đạo diễn. In ra danh sách các bộ phim do đạo diễn này dàn dựng.
13. Một thư viện cần quản lý thông tin về các đầu sách. Mỗi đầu sách bao gồm các
thông tin sau : MaSSach (mã số sách), TenSach (tên sách), TacGia (tác giả), SL (số
lượng các cuốn sách của đầu sách). Viết chương trình thực hiện các chức năng sau:
a) Nhập vào một danh sách các đầu sách (tối đa là 100 đầu sách)
Bài tập Kỹ thuật lập trình Trang 3/3 0
b) Nhập vào tên của quyển sách. In ra thông tin đầy đủ về các sách có tên
đó, nếu không có thì tên của quyển sách đó thì báo là: Không Tìm Thấy
c) Tính tổng số sách có trong thư viện.
14. Viết chương trình tạo một mảng danh sách các máy tính của một cửa hàng,
thông tin của một máy tính bao gồm : - Loại máy - Nơi sản xuất - Thời gian bảo hành
a) Viết hàm nhập một dãy các loại máy tính có thông tin như trên.
b) Hãy viết hàm thống kê xem có bao nhiêu máy có thời gian bảo hành là 1 năm.
c) In ra danh sách các máy tính có xuất xứ từ Mỹ.
15. Để lắp ráp một máy vi tính hoàn chỉnh cần phải có tối thiểu 10 linh kiện loại A
và có thể lắp bổ sung thêm vào khoảng tối đa 8 linh kiện loại B. Tại một cửa hàng
vi tính cần quản lý bán hàng các loại linh kiện tại cửa hàng. Thông tin về một loại
linh kiện gồm có: Tên linh kiện, quy cách, loại, đơn giá loại 1 (chất lượng tốt – số
nguyên), đơn giá loại 2 (chất lượng thường – số nguyên). Viết chương trình thực
hiện những công việc sau :
a) Nhập vào thông tin về các linh kiện có ở cửa hàng.
b) Xuất danh sách các linh kiện đã nhập theo thứ tự tăng dần của loại linh kiện và tên linh kiện.
c) Cho biết đã có đủ 10 linh kiện loại A cần thiết lắp ráp máy hay chưa?
16. Một cửa hàng cần quản lý các mặt hàng, thông tin một mặt hàng bao gồm: - Mã hàng. - Tên mặt hàng. - Số lượng. - Đơn giá. - Số lượng tồn.
- Thời gian bảo hành (tính theo đơn vị tháng).
Hãy nhập vào một danh sách các mặt hàng.
a) Tìm mặt hàng có số lượng tồn nhiều nhất.
Bài tập Kỹ thuật lập trình Trang 4/3 0
b) Tìm mặt hàng có số lượng tồn ít nhất.
c) Tìm mặt hàng có giá tiền cao nhất.
d) In ra những mặt hàng có thời gian bảo hành lớn hơn 12 tháng.
e) Sắp xếp các mặt hàng theo thứ tự tăng dần của số lượng tồn.
17. Viết chương trình tạo tập tin nhị phân chứa 10000 số nguyên bất kỳ ghi vào file
SONGUYEN.INP, mỗi dòng 10 số. Sau đó viết chương trình đọc file
SONGUYEN.INP, sắp xếp theo thứ tự tăng dần và lưu kết quả vào file SONGUYEN.OUT.
18. Viết chương trình tạo một file chứa 10000 số nguyên ngẫu nhiên đôi một khác
nhau trong phạm vi từ 1 đến 32767 và đặt tên là “SONGUYEN.INP”.
19. Viết chương trình tạo một file chứa các số nguyên có tên SONGUYEN.INP.
Sau đó đọc file SONGUYEN.INP và ghi các số chẵn vào file SOCHAN.OUT và
những số lẻ vào file SOLE.OUT.
20. Viết chương trình ghi vào tập tin SOCHAN.DAT các số nguyên chẵn từ 0 đến
100. Viết chương trình đọc tập tin SOCHAN.DAT và xuất ra màn hình, mỗi dòng 30 số.
Bài tập Kỹ thuật lập trình Trang 5/3 0
CHƯƠNG 2: K THUT T CHC VÀ X LÝ D LIU TRÊN
MNG 1 CHIU, 2 CHIU
Trình độ nhp môn
1. Tìm một số trong một mảng bằng lính canh.
2. Tìm một số trong một mảng đã có thứ tự (tìm nhị phân).
3. Viết các thủ tục thêm, xóa, sửa, tìm kiếm một phần tử trong một mảng.
4. Viết hàm chuyển một mảng hai chiều thành một mảng một chiều.
5. Viết hàm chuyển một mảng một chiều có MxN phần tử sang một mảng 2 chiều kích thước MxN.
6. Thực hiện ghép 2 mảng một chiều A, B để tạo mảng C theo nguyên tắc từng phần
tử của mảng A xen kẻ từng phần tử của mảng B.
7. Thực hiện xóa bỏ khoảng trắng thừa và viết hoa đầu từ một chuỗi ký tự cho trước.
8. Cho ma trận A kích thước MxN (0Một điểm Xi,j được gọi là điểm lồi nếu như nó lớn hơn cả 4 điểm trên, dưới, trái, phải của nó.
Yêu cầu: Tìm Xmin là điểm lồi có giá trị nhỏ nhất của mảng.
D liu vào: Được nhập 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ố thực (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 liu ra: Xuất ra màn hình một dòng duy nhất gồm 2 số nguyên I, J lần lượt
ch s dòng và ct của Xmin đầu tiên từ trên xuống và từ trái qua phải. Nếu
không có điểm lồi nào thì xuất ra là -1. Ví dụ:
D liu vào
D liu ra 3 4 1 2 3 9 5 6 4 6 8 7 8 11 7 10
9. Nhập vào một số dạng thập phân, chuyển sang dạng nhị phân, bát phân, thập lục phân.
Bài tập Kỹ thuật lập trình Trang 6/3 0
10. Nhập vào d, m, y, kiểm tra (d,m,y) có lập thành một ngày tháng năm hay không,
nếu có xuất ra ngày tiếp theo.
K thut lp trình
11. Tính tổng, hiệu 2 số nguyên lớn. Hướng dn:
- S dng kiu d liu chui (mng ký t) cho tng s nguyên.
- Làm bài tính tổng trước, làm được mi tính hiu, x lý từng trường hp 2
s có độ dài bằng nhau, độ dài khác nhau…
12. Lập ma trận giá trị bãi mìn cho trò chơi Minesweeper.
13. Cho các số 1, 2, 3, 4, 5 và tổng S ban đầu bằng 0. Có 2 người chơi lần lượt chọn
một trong các số đã cho theo nguyên tắc không được số mà người kia vừa chọn
trước đó, mỗi lần ai chọn đều cộng dồn vào tổng S.
Ví dụ: Ban đầu người A chọn 2 vậy S=0+2=2.
Tiếp theo người B chỉ được chọn 1, 3, 4, 5 (không được chọn 2), ví dụ chọn 4, vậy S=2+4=6.
Tiếp theo A chỉ được chọn 1, 2, 3, 5 (được chọn lại 2 nhưng không được chọn
4), ví dụ chọn 5. Vậy S=6+5=11.
Tiếp theo B chỉ được chọn 1, 2, 3, 4 (không được chọn 5 vì A mới vừa chọn 5),
ví dụ chọn 2. Vậy S=11+2=13….
Ai làm cho tổng S lớn hơn 35 là thua. Lập trình cho người chơi với máy sao cho
khả năng thắng của máy là cao nhất.
Hướng dn: Trò chơi được gii quyết bằng phương pháp Lập bảng phương án.
14. 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 4 = ta có: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7
Bài tập Kỹ thuật lập trình Trang 7/3 0
15. (Ma trn k o Ma phương) 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.
Hướng dn: Một trong nhiều cách giải là như bên dưới
16. (Bài toán dn si). Cho k và n là 2 số nguyên dương, có 2k viên sỏi, được phân
bố trong n đống. Người ta cần san sẻ (theo quy tắc dưới đây) lượng sỏi từ các đống
để dồn sỏi trở về một đống. Quy tắc san sỏi như sau: mỗi lần san áp dụng cho hai
đống sỏi, giả sử rằng một đống có a viên sỏi và còn đống kia có b viên sỏi (không
giảm tổng quát, giả thiết a, b) thì cho phép san (thay đổi số lượng từ hai đống) như
sau: đống a viên (đống có số sỏi không thua đống còn lại) sẽ là a - b viên, còn
đống b trở thành 2*b viên.
Hãy tìm cách san sỏi để cuối cùng còn 1 đống sỏi với 2k viên.
17. (Bài toán bc si t hai đống si). Cho 2 đống sỏi, một đống có a viên sỏi, còn
đóng kia có b viên sỏi (a, b > 0). Hai đấu thủ lần lượt chơi trò bốc sỏi, mỗi lượt đi mỗi người đ ợ
ư c quyền bốc theo quy tắc:
- Ít nhất phải bốc được 1 viên
- Hoặc bốc một lượng sỏi bất kỳ từ một đống, hoặc bốc cùng một lượng sỏi
như nhau ở hai đống (nếu đã bốc sỏi ở hai đống).
Đấu thủ đến lượt đi mà không còn sỏi để bốc thì coi như thua cuộc.
Tìm chiến lược đi để người tr ớ ư c thắng
Bài tập Kỹ thuật lập trình Trang 8/3 0
18. Cho n là số tự nhiên. Cho trước một dãy gồm n ô liên tiếp nhau, mỗi ô hoặc được
đánh dấu hoặc không được đánh dấu và chỉ ở một trong hai trạng thái nói trên mà
thôi. Một trò chơi hai đấu thủ được mô tả như sau:
 Đầu tiên, toàn bộ n ô chưa bị đánh dấu,
 Hai đấu thủ luân phiên nhau đánh dấu vào các ô trong dãy theo quy tắc:
o Hoặc chỉ đánh dấu vào một ô, hoặc đánh dấu vào hai ô liên tiếp nhau chưa bị đánh dấu.
o Người đến lượt đi mà không còn ô chưa đánh dấu là bị thua. Hướng dn:
 Trạng thái kết thúc: mọi ô đã bị đánh dấu,
 Tập trạng thái thua: Các miền (miền được hiểu theo nghĩa (1) gồm dãy liên
tục các ô chưa đánh dấu, (2) ô bất kỳ, nếu có, phải bị đánh dấu trước) có thể
ghép thành các cặp giống hệt nhau:
o Số miền có 1 ô chưa đánh dấu là chẵn; số miền có 2 ô chưa đánh dấu là chẵn.
o Chiến lược đi để người đầu tiên thắng:
 Tại bước đi đầu tiên: nếu n lẻ đánh dấu vào ô có thứ tự (n div
2)+1” nếu n chẵn đánh dấu hai ô (n div 2) và (n div 2)+1.
 (Sau đó đối thủ đi trước một bước),
 Mỗi bước tiếp theo sẽ chọn một “bước đi đối xứng” với bước
mà đối thủ vừa đi "Đối xứng" ở đây qua trục đối xứng của dãy.
Ví dụ, với n = 9 nếu đối thủ xoá đi ô 3 thì ta xóa ô 7, nếu đối thủ xóa đi 2 ô 1
và 2 thì ta xóa 2 ô 8 và 9 v.v. Với n=10, nếu đối thủ xóa ô 3 thì ta xoá ô 8, nếu đối thủ
xóa hai ô 1 và 2 thì ta xoá 2 ô 9 và 10 v.v..
Sau mỗi bước đi của ta, trình trạng của dãy có tính đối xứng và vì vậy, hoặc đối
thủ gặp trạng thái kết thúc, hoặc ta luôn còn nước đi. Chú ý:
 Có thể đặt ra bài toán khó hơn: Từ một trạng thái bất kỳ (một số ô đã bị đánh
dấu, còn các ô còn lại thì chưa), hãy tìm chiến lược đi để khả năng người đi trước
thắng là cao nhất có thể được. Tương tự lý giải của trường hợp trên, chiến lược đi là
Bài tập Kỹ thuật lập trình Trang 9/3 0
đúng định hướng tới việc tạo ra các tình huống đối thủ vào trạng thái thua có thể được;
nếu không đưa về “gần trạng thái thua hơn” và không để đối thủ buộc ta vào trạng thái
thua. Một số ý tưởng liên quan đến vấn đề này:
- Sử dụng khái niệm ”miền” trước đây. Hai miền khác nhau được gọi là đi
cặp với nhau nếu chúng cùng số lượng ô.
- Sau khi đã ghép được các cặp, còn một số miền chưa được ghép cặp: hãy
khử số miền theo kiểu này song chú ý chớ nên tạo điều kiện cho đối thủ buộc ta rơi vào trạng thái thua.
19. Cho m, n là hai số tự nhiên. Cho trước một bảng hai chiều gồm m dòng, mỗi dòng
có n cột các ô, mỗi ô được đánh dấu hoặc không được đánh dấu và chỉ ở một
ttrong hai trạng thái nói trên mà thôi. Một trò chơi hai đấu thủ được mô tả như sau:
 Đầu tiên toàn bộ m x n ô của bảng chưa bị đánh dấu.
 Hai đấu thủ luân phiên nhau đánh dấu các ô trong dãy theo quy tắc sau:
o Chỉ đánh dấu vào các ô chưa bị đánh dấu.
o Đánh dấu từ 1 ô đến 4 ô chưa bị đánh dấu có kề cận đỉnh (hay cạnh)
và nằm trọn trong một hình vuông có cạnh dài không quá 2.
 Người đến lượt đi mà không còn ô chưa bị đánh dấu để đi tiếp là bị thua.
Tìm chiến lược đi để người đi trước luôn thắng. Hướng dn:
Hoàn toàn có th s dng thuật toán đi đối xng của bài trên để gii bài này.
Có th m rộng bài toán như đã làm bài toán 3 song vic qun lý các min khó
khăn hơn rất nhiu.
Bài tập Kỹ thuật lập trình Trang 10/3 0
20. Lập ma trận kỳ ảo theo cách khác bài 15 theo như hướng dẫn bên dưới . Hướng dn:
Ví dụ: Với N=3 và N=5 ta có Bắc 2 7 6 3 16 9 22 15 9 5 1 20 8 21 14 2
4 3 8 Tây 7 25 13 1 19 Đông 24 12 5 18 6 11 4 17 10 23 Nam
- 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 Kỹ thuật lập trình Trang 11/3 0
CHƯƠNG 3: TINH CHỈNH CHƯƠNG TRÌNH
Trình độ nhp môn
1. Nhập x và p, tính xp.
2. Tính S(n) = 1 + (1+2) + (1+2+3)+…+(1+2+3+…+n) (n<106) 1 1 1 3. S (n) 1 Tính     1  2 1  2 3
1 2 3 ...  n
4. Tính S(n) = 1 + (1x2) + (1x2x3)+…+(1x2x3x…xn) 1 1 1 5. S(n) 1 Tính     2! 3! n! 2 n x x x x 6. e  1    Tính 1! 2! với x và n cho trước n!
7. Tính giá trị phần tử thứ n của dãy Fibonacci (không dùng mảng).
8. Nhập số thực A (01 1 1 1    ...  A 2 3 n
9. Nhập vào một mảng các số nguyên.
a/ Xếp lại mảng đó theo thứ tự giảm dần.
b/ Nhập vào một số nguyên từ bàn phím. Chèn số đó vào mảng sao cho mảng
vẫn có thứ tự giảm dần. (không được xếp lại mảng)
10. (Phân loi ký tự) Cho một chuỗi ký tự, hãy phân loại mỗi ký tự theo 4 kiểu sau:
kiểu chữ thường, kiểu chữ hoa, chữ số và kiểu “khác” (tức là các ký tự không thuộc ba loại trên).
K thut lp trình
11. Viết chương trình thực hiện phép nhân 2 số nguyên lớn (từ 50-100 chữ số)
12. Tính S(n) = 1 + (1+2) + (1+2+3)+…+(1+2+3+…+n) (n<1010)
13. Viết chương trình sắp xếp tăng một mảng có n phần tử chỉ gồm các số 1,2 và 3 sao
cho thực hiện ít phép hoán vị nhất.
Bài tập Kỹ thuật lập trình Trang 12/3 0
14. Tính S = A0 + A1x + A2x2 + … + Anxn
Hướng dn: Chương trình dưới đây dùng 2n phép tính nhân S = A[0]; xi=1;
for (int i=1; i<=N;i++) { xi = xi*x; S = S + A[i]*xi; }
Liu có cách viết nào tốt hơn (chạy nhanh hơn) không?
15. Biết giai thừa của n, kí hiệu: n! = 1 x 2 x 3 x … x n. Cho một số nguyên dương n.
Hãy cho biết giai thừa của n có bao nhiêu chữ số ‘0’ ở bên phải.
Ví dụ: 5! = 1 x 2 x 3 x 4 x 5 = 120 có 1 chữ số ‘0’ ở bên phải.
16. Cho một chuỗi S chỉ gồm các ký tự < và > có chiều dài n (n<=1000). Yêu cầu:
Hãy chèn n+1 số nguyên dương vào sao cho ta có bất đẳng thức đúng sao cho số
nguyên lớn nhất Tmax trong n+1 số này là nhỏ nhất. Viết chương trình nhập vào
chuỗi S và xuất ra Tmax như trên. Ví dụ: S = ><>< sẽ cho ra bất đẳng thức đúng
như sau: 2>1<2>1<2. Vậy Tmax=2.
17. (Dãy các s 1) Cho một số nguyên n bất kỳ (0≤n≤10000), n không chia hết cho 2
và không chia hết cho 5. Hỏi có ít nhất bao nhiêu chữ số trong dãy các số 1 sao
cho (dãy) số đó chia hết cho n.
18. Viết chương trình nhập vào một số nguyên n, xuất ra một số nguyên x >0 nhỏ nhất x 1
sao cho p=   1 10i x , với p
=nxb và b là một số nguyên dương.  i 0
Ví d: n=3 => x=3, n=7 => x=6, n=9901 => x=12 19. 1 1 1 Tính S( ) n  (1 )(1 )...(1 ) 2 2 2 1 2 n
Bài tập Kỹ thuật lập trình Trang 13/3 0
BUI 4: PHƯƠNG PHÁP DUYT
Trình độ nhp môn
1. Tìm giá trị nhỏ nhất của các phần tử trong một mảng một chiều.
2. Tính tổng các phần tử trong mảng một chiều. 3. Tính n!
4. Viết chương trình tìm nhị phân (viết ệ đ quy) k 5. Tính Cn
6. Tính giá trị phần tử thứ n của dãy Fibonacci (không dùng mảng)
7. Tính tổng giá trị các số nguyên có trong một chuỗi ký tự.
Ví dụ: Chuỗi 2AS34ASDF342B có tổng là 2+34+342=378
8. Tìm số nguyên tố nhỏ nhất trong mảng.
9. Tìm UCLN của tất cả các phần tử trong mảng.
10. Tìm phần tử có tần số xuất hiện nhiều nhất trong một mảng.
K thut lp trình
11. Liệt kê tất cả các dãy nhị phân có độ dài n.
12. Liệt kê tất cả tập con của tập n phần tử
13. Liệt kê tất cả hoán vị của tập n phần tử
14. Cài đặt bài mã đi tuần
15. Cài đặt bài Tháp Hà Nội.
16. Cài đặt bài toán 8 con hậu.
17. Có N thành phố, được đánh số từ 0 đến N-1. Một người du lịch xuất phát từ một
thành phố muốn đi thăm các thành phố khác, mỗi thành phố đúng một lần rồi quay
về nơi xuất phát. Chi phí đi từ thành phố i đến thành phố j là A[i][j], (0 ≤ i,j < N).
Hãy tìm một hành trình cho người du lịch để tổng chi phí theo hành trình này là ít nhất.
18. Có N chi tiết được đánh số từ 0 đến N-1 cần được gia công. Các chi tiết có thể
hoàn thành trên một máy A hoặc trên một máy B. Các máy này có thể hoạt động
độc lập và làm việc đồng thời. Biết rằng thời gian gia công chi tiết i trên máy A là
A[i] và trên máy B là B[i]. Hãy tìm một phương án phân công cho các máy để thời
gian hoàn thành cả N chi tiết là sớm nhất.
Bài tập Kỹ thuật lập trình Trang 14/3 0
19. Một dãy dấu ngoặc hợp lệ là một dãy ký tự “(“ và “)” được định nghĩa như sau:
- Dãy rỗng là 1 dãy dấu ngoặc hợp lệ độ sâu là 0.
- Nếu A là dãy dấu ngoặc độ sâu k thì (A) là dãy dấu ngoặc hợp lệ độ sâu k + 1
- Nếu A và B là hai dãy dấu ngoặc hợp lệ với độ sâu lần lượt là p và q thì AB
là dãy dấu ngoặc hợp lệ độ sâu là max (p,q)
- Độ dài của 1 dãy ngoặc là tổng số ký tự “(“ và “)”.
Hãy liệt kê 1 dãy dấu ngoặc hợp lệ có độ dài m và độ sâu n.
Dữ liệu vào Dữ liệu ra 8 3 ((()())) ((())()) ((()))() (()(())) ()((()))
20. Cài đặt bài hình vuông Latinh (là hình vuông có dòng đầu và cột đầu gồm các số
từ 1 đến n. Trên mỗi dòng và mỗi cột đều là một hoán vị của các phần tử từ 1 đến n.
Bài tập Kỹ thuật lập trình Trang 15/3 0
CHƯƠNG 5: GII THUT SINH
Trình độ nhp môn
1. Đổi tất cả các số thập phân từ 1 đến n sang hệ nhị phân.
2. Viết hàm tính tổng các phần tử là số Amstrong (là số có đặc điểm như sau: số có k
ký số, tổng các lũy thừa bậc k của các ký số bằng chính số đó).
Ví dụ: 153 là số có các ký số 13+53+33=153
3. Viết chương trình tìm số lẻ nhỏ nhất nhưng lớn hơn mọi số chẵn trong mảng.
4. Viết hàm thực hiện các thao tác trên bit (bật, tắt, lấy giá trị bit thứ i ủ c a biến n).
5. Viết bitcount đếm số lượng bit 1 của một số nguyên dương n.
6. Cho hàm F(n) với n nguyên không âm được xác định như sau:
F(0)=0, F(1)=1, F(2n)=F(n), F(2n+1) = F(n) + F(n+1).
Viết chương trình tính F(n).
7. Viết chương trình xuất ra tất cả các số nguyên tố nhỏ hơn n theo thuật toán sàng Eratosthène.
8. Viết chương trình kiểm tra một chuỗi có ố đ i xứng không?
9. Viết chương trình nhập vào ma trận A[M][N], hãy xuất ra màn hình các phần tử
A[i][j] sao cho A[i][j] là phần tử có giá trị lớn nhất dòng i và nhỏ nhất cột j .
K thut lp trình
10. Sinh tất cả các dãy nhị phân có độ dài n.
11. Sinh tất cả tập con của tập n phần tử.
12. Sinh tất cả hoán vị của tập n phần tử.
13. Viết chương trình sinh tất cả tổ hợp chập k của n phần tử cho trước.
14. Chú lùn Hugo đang bị lạc vào một mê cung hình chữ nhật gồm M dòng và N cột,
M, N≤100. Các dòng (cột) đánh số từ 1 đến M (từ 1 đến N) từ trên xuống (từ trái
sang). Hugo đang đứng ở ô (X,Y). Từ một ô bất kỳ, trong mỗi bước di chuyển,
Hugo có thể di chuyển đến 1 trong 8 ô chung quanh. Mỗi ô của mê cung ứng với
một số trong phạm vi 0 đến 255 với ý nghĩa quy định những hướng Hugo có thể di
chuyển từ ô đó. Quy định đó như sau:
Giả sử biểu diễn với 8 bit của số tại ô Hugo đang đứng (ghi chữ H) là
b0b1b2b3b4b5b6b7, ta đánh số các ô chung quanh ô đó với các số 7..0, với 0≤I≤7,
Hugo di chuyển theo hướng I nếu và chỉ nếu bit bi=1.
Bài tập Kỹ thuật lập trình Trang 16/3 0 Yêu cu
: Hãy chỉ cho Hugo một hành trình qua ít ô nhất để có thể thoát khỏi
mê cung nếu có thể. Chú ý rằng Hugo có thể di chuyển ra một ô biên nhưng từ ô
biên đó Hugo không đi ra ngoài mê cung được.
D liu: Vào từ file HUGO.INP trong đó dòng thứ nhất ghi 2 số M, N, tiếp
theo là M dòng, dòng thứ I ghi N số tương ứng với các ô dòng thứ I của mê cung.
Dòng cuối cùng ghi 2 số X,Y.
Kết qu: Ghi ra file HUGO.OUT như sau: dòng thứ nhất ghi số nguyên không
âm C mà C=0 nếu Hugo không ra khỏi mê cung được, nếu C>0, đó chính là số ô
trên hành trình Hugo đi ra khỏi mê cung. Nếu C>0, trong C dòng tiếp theo, mỗi
dòng ghi chỉ số dòng và chỉ số cột của một ô lần lượt trên hành trình của Hugo bắt
đầu từ ô (X,Y) và cuối cùng là ô trên biên mà từ ô đó Hugo có thể ra khỏi mê cung. Ví d: HUGO.INP HUGO.OUT 5 6 3 1 2 3 4 5 6 3 4 7 8 9 10 11 12 4 4 13 14 15 16 17 18 5 4 19 20 21 22 23 24 25 26 27 28 29 30 3 4
15. Viết chương trình sinh tất cả chỉnh hợp chập k của n phần tử cho trước.
16. In ra theo thứ tự tăng dần tất cả các phân số tối giản 017. Cho hàm F(n) với n nguyên không âm được xác định như sau:
F(0)=0, F(1)=1, F(2n)=F(n), F(2n+1) = F(n) + F(n+1).
Viết chương trình tính F(n) với điều kiện không dùng mảng độ dài N.
18. Hãy liệt kê tất cả các dãy nhị phân độ dài n mà trong đó cụm chữ số “01” xuất hiện đúng 2 lần.
19. Liệt kê tất cả các cách phân tích số nguyên dương n thành tổng các số nguyên
dương, hai cách phân tích là hoán vị của nhau chỉ tính là một cách.
Bài tập Kỹ thuật lập trình Trang 17/3 0
BUI 6: QUY HOẠCH ĐỘNG
Trình độ nhp môn
1. Đổi tất cả các số thập phân từ 1 đến n sang hệ nhị phân. n k ! 2. Tính Cn với 0  k  n 20.
k!(n k)!
3. Viết chương trình xuất ra n phần tử đầu tiên của dãy Fibonacii
4. Viết hàm xóa các phần tử trùng nhau trong dãy, chỉ giữ lại một phần tử trong đó. Ví dụ: 1 2 3 2 1 2 4 -> 1 2 3 4
5. Viết chương trình tính tích của 2 ma trận
6. Viết chương trình đếm và liệt kê các mảng con tăng dần trong mảng một chiều các số nguyên.
Ví dụ: 6 5 3 2 3 4 2 7 các dãy con tăng dần là 2 3 4 và 2 7
7. Viết chương trình tìm mảng con tăng dần có tổng lớn nhất trong mảng một chiều.
8. Viết chương trình in ra tam giác Pascal
9. Viết chương trình đếm số lần xuất hiện của từng loại ký tự trong một chuỗi.
10. Viết chương trình đảo ngược các từ trong một chuỗi, mỗi từ được định nghĩa là
cách nhau ít nhất một ký tự trắng. Ví dụ: “TU DO HANH PHUC” -> “UT OD HNAH CUHP”
K thut lp trình
11. (Bài toán tìm dãy con đơn điệu dài nht). Cho N số nguyên dương, dãy a1, a2
,…an gồm các số thực. Tìm trong dãy đó có một dãy con ai1, ai2,…aik của dãy trên thoã mãn điều kiện: i) aij ≤ aij+1 ii) ij ≤ ij+1
iii) Không có dãy con nào thoả tính chất i) & ii), mà có nhiều phần tử hơn.
Bài tập Kỹ thuật lập trình Trang 18/3 0 Hướng dn: Đặt A = =
0 -∞ và An+1 ∞.
Gọi L[i] là độ dài dãy con tăng dài nhất ca các phn t ly trong min
t Ai đến An+1 và phn t đầu của dãy tăng là Ai. Ta có công thức QHĐ để tính L[i] như sau: + L[n+1] = 1
+ L[i] = max(L[j]) + 1 vi mi i≤ Aj
12. (Xâu con chung dài nht) Cho hai xâu văn bản X và Y só độ dài nằm trong
khoảng từ 50 đến 100. Sâu Z được gọi là “xâu con chung“ của X và Y nếu Z nhận
được từ X (hoặc Y) bằng cách loại bỏ một số kí tự nào đó. Ví dụ nếu X=”AdksHKoiGAdksHKoiG” và Y=”ADKSHKOIGADKSHKOIG” thì
Z=”AHK” là một con xâu chung của X và Y. Hãy tìm xâu con chung lớn nhất có
thể được (trong ví dụ trên Z cực đại sẽ là “AHKGAHKG”)
Hướng dn:
Gọi L[i][j] là độ dài xâu con chung dài nht ca xâu X[i] gm i kí t phn
đầu ca X và xâu Y[j] gm j kí t phần đầu ca Y.
Ta có công thức QHĐ như sau: + L[0][j]=L[i][0]=0
+ L[i][j]=L[i-1][j-1] + 1 nếu X[i]=Y[j]
+ L[i][j]=max(L[i-1][j], L[i][j-1]) nếu X[i]<>Y[j] k
13. Tính các phần tử của mảng C[n][k] = Cn = số tổ hợp chập k của n phần tử, với 0  k  n 20. o n k k-1 k Biết Cn = Cn = 1 và Cn = Cn-1 + Cn-1
Bài tập Kỹ thuật lập trình Trang 19/3 0 Hướng dn:
Tính nghim của bài toán trong trường hợp riêng đơn giản nht. for (i=1;i<=n;i++) { C[0][i] = 1; C[i][i] = 1; }
Tìm các công thức đệ quy biu din nghim tối ưu của bài toán ln thông qua
nghim tối ưu của các bài toán con. for (i=2;i<=n,i++) for (j=1;i
C[i][j] = C[i-1][j-1] + C[i-1][j]; C[n][k] 0 1 2 3 4 5 1 1 1 2 1 2 1 3 1 3 3 1 4 1 4 6 4 1 5 1 5 10 10 5 1
Có th ci tiến: dùng 2 mng mt chiu thay cho 1 mng hai chiu.
14. Cho n món hàng (n  50). Món thứ i có khối lượng là A[i] (số nguyên). Cần chọn
những món hàng nào để bỏ vào một ba lô sao tổng khối lượng của các món hàng
đã chọn là lớn nhất nhưng không vượt quá khối lượng W cho trước. (W  100).
Mỗi món chỉ chọn 1 hoặc không chọn. Input: n W A[1] A[2] … A[n] Ví dụ: 4 10 5 2 4 3 OutPut:
Tổng khối lượng của các món hàng bỏ vào ba lô.
Khối lượng của các món hàng đã chọn.
Bài tập Kỹ thuật lập trình Trang 20/3 0