Bài t p c u trúc d li u và gi i thu t
Trang 1
Chương 1
T ng quan v c u trúc d li u và gi i thu t
Vi t ch ng trình hoàn ch nh cho các bài toán sau đâyế ươ
(các bài t p v ôn t p, các bài t p v rèn luy n cách l a ch n m t c u trúc
d li u thích h p; m t thu t toán thích h p cho v n đ bài toán)
BT1-1. Cho n s nguyên d ng a ươ 0,a1,a2,...,an-1.
a.Chèn ph n t x vào v trí k c a dãy.
b.Xóa t t c các s nguyên t trong dãy.
BT1-2. Cho ma tr n vuông n dòng n c t; m i ph n t c a ma tr n là m t phân s
(gi thi t r ng t s và m u s c a các phân s này là các s nguyên). Hãy th c ế
hi n các yêu c u sau:
a.Tìm phân s có giá tr nh nh t n m trong kho ng.(0;1).
b.Đm s l ng phân s n m trong ma tr n tam giác trên có giá tr n mế ượ
trong kho ng (0,1)
c.S p x p các phân s trong ma tr n tăng d n t trái qua ph i và t trên ế
xu ng d i. ướ
BT1-3.Vi t ch ng trình t o m t t p tin văn b n ế ươ có tên là “DAYSO.INP” có c u
trúc nh sau:ư
-Dòng đu tiên ghi n (n là s nguyên d ng nh p t bàn phím). ươ
-Trong các dòng ti p theo ghi n s nguyên ng u nhiên trong ph m vi t 1ế
đn 10000, m i dòng 10 s (các s cách nhau ít nh t m t d u cách).ế
Hãy th c hi n các công vi c sau đây:
a.Tìm giá tr l n nh t c a các s trong t p tin DAYSO.INP.
b.Đm s l ng s ch n, s l ng s l trong t p tin DAYSO.INP.ế ượ ượ
c.Hãy đm s l ng s nguyên t , s chính ph ng, s hoàn h o, sế ượ ươ
Amstrong trong t p tin DAYSO.INP.
Hãy ghi k t qu c a các câu a,b,c trên vào t p tin văn b n có tên làế
“DAYSO.OUT”.
Bài t p c u trúc d li u và gi i thu t
Trang 2
BT1-4.Vi t ch ng trìnhế ươ t o t p tin văn b n có tên là BANGSO.INP” có c u
trúc nh sau:ư
-Dòng đu tiên ghi hai s m và n (m, n là các s nguyên d ng nh p t bàn ươ
phím)
-Trong m dòng ti p theo m i dòng ghi n s nguyên ng u nhiên trong ph mế
vi t 0 đn 1000 (các s cách nhau ít nh t m t d u cách) ế
Hãy th c hi n các công vi c sau:
a.Hãy cho bi t ch s các dòng có ch a s nguyên t (gi thi t các dòngế ế
trong t p tin văn b n đc đánh s t 0 đn m-1). ượ ế
b.Xoay vòng các c t qua ph i m t v trí (c t 0 s qua c t 1, c t 1 qua c t
2,... c t n-1 v c t 0).
c.S p x p các ph n t tăng d n trên t ng c t. ế
Hãy ghi các k t qu trên vào file văn b n có tên là “BANGSO.OUT”.ế
BT1-5. Cho m ng m t chi u g m n t a đ đi m (gi s hoành đ và tung đ
c a các đi m là các s nguyên).
a.Hãy tìm m t đi m trong m ng xa g c t a đ nh t.
b.Hãy tìm t a đ hai đi m g n nhau nh t.
c.Hãy xác đnh t a đ c a hình ch nh t nh nh t bao h t c n đi m trên ế
(t a đ góc trên bên trái và t a đ góc d i bên ph i c a hình ch nh t). ướ
Ví d n = 5 và t a đ 5 đi m là: (0,0); (0,3); (3,3); (4,1); (4,4).
Thì k t qu câu a là đi m (4,4), k t qu câu b là (3,3) và (4,4), k t qu câuế ế ế
c là (0,4); 4(,0).
BT1-6.Cho dãy n s nguyên a0,a1,...,an-1. Hãy chuy n k ph n t đu tiên c a dãy
v cu i dãy.
BT1-7.Gi s n 1 và x là s th c. Hãy vi t hàm tính giá tr c a bi u th c sau ế
đây (v i đ ph c t p tuy n tính): ế
n
xxxx
xnS
n
n
1
...
2
1
1
)1(...
3
1
2
1
1
2
1
1
1
),(
1
32
BT1.8.Tìm s h ng th n c a dãy Fibonasci (gi i quy t khi n là m t s l n khi ế
đó ta không th s d ng đ quy và cũng không th s d ng m ng đ l u tr ). ư
Bài t p c u trúc d li u và gi i thu t
Trang 3
BT1-9. Gi s n 0 và x là s th c.Hãy tính giá tr c a bi u th c sau đây.
S(n,x) =
!
...
!3!2!1
1
32
n
xxxx n
BT1-10.a.Cho dãy n s nguyên a0,a1,...,an-1.Hãy tìm dãy con liên ti p tăng dài nh t.ế
b.Cho dãy n s nguyên a0,a1,...,an-1.Hãy tìm đo n con dài nh t ch a toàn s
0.
c.Cho dãy n s nguyên a0,a1,...,an-1.Hãy tìm dãy con tăng ch a nhi u s
nguyên t nh t.
BT1-11.a.C ng hai s nguyên l n a và b, trong đó s a có m ch s và s b có n
ch s .
S nguyên l n đây là s có th có đn vài trăm ch s . Đ l u tr các s ế ư
nguyên l n này ta có th dùng chu i (m i ký t c a chu i là m t ch s ) ho c
dùng m ng m t chi u (m i ph n t c a m ng m t chi u là m t ch s ). Tuy
nhiên trong hai ph ng án này thì ph ng án dùng m ng m t chi u đ l u tr sươ ươ ư
có thu t toán t t h n. ơ
b.Th c hi n phép tr hai s nguyên l n.
c.Th c hi n phép nhân hai s nguyên l n.
d.Th c hi n phép chia hai s nguyên l n.
BT1-12.Cho dãy n s nguyên {ai, đây gi s i=1..n} Dãy con liên ti p là dãy mà ế
thành ph n c a nó là các thành ph n liên ti p nhau trong {a}, ta g i t ng c a dãy ế
con là t ng t t c các thành ph n c a nó. Tìm t ng l n nh t trong t t c các
t ng c a các dãy con c a {a}.
Ví d n u n = 7; ế
4 –5 6 –4 2 3 -7
Thì k t qu t ng là 7.ế
Ph n g i ý:
BT1.9.
Algorithms1: O(N2)
float s=1;
Bài t p c u trúc d li u và gi i thu t
Trang 4
for (int i=1;i<=n;i++)
s=s+pow(x,i)/giaithua(i);// giaithua(i) = i!=1.2.3….i
Đ ph c t p theo cách này là O(N2), tuy nhiên ch ng trình không th th cươ
hi n đc khi n l n; ch ng h n n =100 - do phép tính giai th a c a n không th ượ
th c hi n..
Algorithms2: O(N2)
float s=1,p;
for (int i=1; i<=n;i++)
{
p=1;
for (int j=1; j<=i;j++)
p=p*x/j;
s=s+p;
}
Đ ph c t p theo cách này v n là là O(N2), tuy nhiên ch ng trình đã ươ
không c n tính giai th a c a n.
Algorithms3: O(N) – đ ph c t p tuy n tính ế
float s=1,p=1;
for (int i=1;i<=n;i++)
{
p=p*x/i;
s=s+p;
}
BT1-11.a.
Nh p m ch s c a s a, l u vào m ng m t chi u a. ư
Nh p n ch s c a s b, l u vào m ng m t chi u b. ư
Gi s ta có hai s a=97895 và b = 6478
i 0 1 2 3 4
a[i] 9 7 8 9 5
Bài t p c u trúc d li u và gi i thu t
Trang 5
B[i] 6 4 7 8
L u ý n u khi nh p mà không gi ng hàng bên ph i thì k t qu s sai, ta cóư ế ế
th ti n hành nh p hai s a,b theo cách sau đ kh c ph c tình tr ng này: ế
Đt max là s l n nh t trong hai giá tr m và n.
Vi c nh p hai s a ,b đc ti n hành nh sau: ượ ế ư
for i=max-m+1;i<=max;i++
cin>>a[i];
for i=max-n+1;i<=max;i++
cin>>b[i];
Sau đó th c hi n phép c ng nh cách thông th ng: ư ườ
remember=0;
for (i=max; i >=1;i--)
{
c[i]=(a[i]+b[i]+remember)%10;
remember=(a[i]+b[i]+remember)/10;
}
c[0]=remember;
m ng c[i] chính là t ng c a hai s a và b.
L u ý là giá tr c[0] này ch xu t ra khi nó khác 0.ư
Đo n ch ng trình xu t k t qu nh sau: ươ ế ư
if (c[0]!=0) cout<<c[0];
for (i=1;i<=max;i++)
cout<<c[i];
D li u th :
m =5; n = 4;
a = 97895, b = 6478
Giá tr c a các ph n t c a hai m ng a và b là:
a[1] = 9, a[2]=7; a[3]=8; a[4]=9. a[5]=5.
b[2] = 6, b[3]=4; b[4]=7; b[5]=8