Trang 156
Trang 1
TÀI LI U THAM KH O
[1] John Bentley, “Nh ng viên ng c trong k thu t l p trình”.
[2] Wikibooks.org, “C Programming”, 2012.
[3] Ph m V n Dt, “K thu t l p trình C - C s và nâng cao”, NXB khoa h c k/ thu t, 2007.
[4] Tr n &an Th ,“Ngôn ng l p trình C t p 1&2”, Tr
ng &H KHTN &HQG TPHCM, 2005.
[5] Tr n V n H o, Hu2nh Minh Trí, Phan T n Qu c, “Giáo trình tuy n t p các bài t p lâp trình
c n b n”, Tr
ng & i H c Sài Gòn, 2011.
GIÁO TRÌNH
C S L P TRÌNH
Trang 2
Trang 155
Tìm chu i s2 trong chu i s1 tr v v trí chu i s2 trong chu i s1.
int
atoi(char *s);
&)i chu i s thành s ki u int.
L i nói
u
int
atol(char *s);
&)i chu i s thành s ki u long.
C s l p trình là h c ph n
u tiên, óng vai trò quan tr ng
các ngành Công ngh thông tin, Toán ng d ng,
int
i v i các sinh viên thu c
&)i chu i s thành s ki u float.
i n t vi n thông,… C s l p trình nh m
void flushall();
cung c p ki n th c n n t ng và các k n ng th c hành v l p trình cho sinh viên; C s l p
Xoá vùng
trình nh m giúp sinh viên h c t t các h c ph n v l p trình ti p theo. Ngoài ra, nó c ng là n i
dung quan tr ng trong kh i ki n th c
các k thi hoàn ch nh
T a
trình C/C++, C u trúc i u khi n, Ch
c u trúc. Giáo trình chia thành 7 ch
h c ph n C s l p trình c!a tr
ng
ng trình con,
Thu t toán, M
u v ngôn ng l p
quy, M ng, M t s ki u d li u có
ng g m các n i dung ki n th c theo
i h c Sài Gòn, kèm theo các
c
ng chi ti t
thi m"u. M#i ch
ng
Ph n bài t p: G m nhi u bài t p
$c chia làm hai m c
c b n và luy n t p nâng
cao, bài t p có ánh d u * là bài t p khó dành cho sinh viên luy n t p thêm.
$c biên so n
làm tài li u gi ng d y cho h c ph n C s l p trình
i h c và cao &ng. Quy n giáo trình này c ng có th làm tài li u tham kh o cho các giáo
viên ang gi ng d y ki n th c l p trình c n b n
b c ph' thông, và giúp cho sinh viên t h c
có k t qu .
Chúng tôi trân tr ng gi i thi u v i b n
c quy n giáo trình C s l p trình này và hy
v ng r ng nó s( giúp cho vi c gi ng d y và h c t p môn C s l p trình
Cu i cùng, chúng tôi xin g i l i c m n chân thành
công ngh thông tin tr
c s d ng tr
c các l nh nh p
màn hình
H to
trên màn hình nh n i m
g c trên bên trái làm i m g c, tr c hoành là tr c
n"m ngang ch y t trái sang ph i, tr c tung là tr c th ng
màn hình th
ng
ng t trên xu ng d
i. Các t a
c ký ki u là x và y, v i x là ch s c t; còn y ch s hàng. Góc trái bên trên
c a màn hình có t a
(1:1); góc ph i bên d
i có t a
(80:25) – gi i h n này tùy thu c l i
Giá tr b ng màu
$c trình bày ng%n g n, có các ví d minh ho .
Ph n lý thuy t:
h
ng
màn hình. Ta có th di chuy n con tr' t i m t v trí m i trên màn hình b"ng l nh gotoxy(x,y).
g m 3 ph n:
Giáo trình này
m bàn phím, l nh này th
li u nh gets ho c scanf.
i h c và thi cao h c ngành
công ngh thông tin.
Giáo trình c s l p trình này trình bày các v n
atof(char *s);
ng
n các
$c thu n l$i h n.
ng nghi p trong khoa
i H c Sài Gòn ã có nhi u óng góp quý báu, ã cùng chúng
tôi chia s( n i dung t p bài gi ng C s l p trình này trong su t th i gian qua.
BLACK
=
0
BLUE
=
1
GREEN
=
2
CYAN
=
3
RED
=
4
MAGENTA
=
5
BROWN
=
6
LIGHTGRAY
=
7
DARKGRAY
=
8
LIGHTBLUE
=
9
LIGHTGREEN
=
10
LIGHTCYAN
=
11
LIGHTRED
=
12
LIGHTMAGENTA
=
13
YELLOW
=
14
WHITE
=
15
BLINK
=
128
Cách ghi giá tr màu là chu i in hoa nh trên hay s t
ng ng là t
ng
ng.
Trang 154
$ h a.
-Các mã ASCII 128-255 là các ký t
Ch
string.h
Ch nh p vào t bàn phím chu i ký t , hàm tr v con tr' tr' t i
mb ob
ng 1
THU T TOÁN
char *gets(char * str);
Chú ý r"ng
Trang 3
m bàn phím
c làm r ng tr
a ch
u chu i str.
c khi nh p d li u chu i, chúng
ta nên s d ng hàm fflush(stdin).
char *puts (char * str);
Xu t chu i str lên màn hình.
Trong ph m vi tài li u này, bài toán
unsigned *strlen(const char *str);
Xác
c quan ni m là vi c nào ó ta mu n máy tính
th c hi n, ch ng h n vi t m t dòng ch ra màn hình, gi i ph
nh chi u dài c a chu i str.
trong tr
char* strcpy(char *dest, const char * src);
Sao chép n i dung trong src vào trong dest. Hàm tr v con tr' tr' t i
u c a chu i ích (con tr' dest)
ng h c v.v…
Khi dùng máy tính gi i bài toán, ta c n quan tâm
a ch
tin gì (Input) và c n l y ra thông tin gì (Output). Do ó
int strcmp(char *s1, char *s2);
ng trình b c hai, qu n lí i m
n hai y u t :
phát bi u m t bài toán ta c n ph i
ch rõ Input và Output c a bài toán ó.
(so sánh có phân bi t ch hoa và ch th
ng)
Ví d 1.1:
Tr v k t qu so sánh hai chu i s1 và s2.
Gi i ph
ng trình b c nh t ax + b = 0
N u giá tr tr v > 0 thì chu i s1 ch a chu i s1
Input:
Các giá tr th c a,b
N u giá tr tr v < 0 thì chu i s2 ch a chu i s1
Output:
Nghi m là giá tr x ho c thông báo không có nghi m
N u giá tr tr v = 0 thì chu i s2 gi ng chu i s1
Ví d 1.2:
int stricmp(char *s1, char *s2);
Qu n lí l
(so sánh không phân bi t ch hoa và ch th
ng)
char * strrev(char *st);
& o ng
a vào máy thông
ng trong m t doanh nghi p
Input:
Thông tin cá nhân c a t ng nhân viên trong doanh nghi p
Output:
Thông tin c n khai thác v m t nhân viên, m t phòng ban, hay toàn
c các k/ t trong chu i st, hàm tr v con tr' st.
doanh nghi p.
strlwr(char *s);
&)i chu i s thành ch th
ng.
Kh n ng khai thác máy tính ph thu c r t nhi u vào s hi u bi t c a ng
strupr(char *s);
&)i chu i s thành ch hoa.
Vi c gi i bài toán trên máy tính
B
strcat(char *s1, char *s2);
Nh
Ghép chu i s2 vào sau chu i s1.
xác
strchr(char *s,char c);
Tìm ký t c trong chu i s, không có tr v NULL; tìm t bên trái.
strstr(char *s1, char *s2);
ã trình bày, m i bài toán
nh bài toán chính là xác
c u c!n th n
c ti n hành qua các b
c sau:
nh bài toán
c
c t b i hai thành ph n: Input và Output. Vi c
nh rõ hai thành ph n này. Các thông tin ó c n
có th l a ch n thu t toán, cách th hi n các
il
ng ã cho và các
c nghiên
il
ng
phát sinh trong quá trình gi i bài toán và ngôn ng l p trình thích h p.
strrchr(char *s,char c);
Gi ng hàm trên nh ng b(t
c 1: Xác
i s d ng.
u tìm t bên ph i.
Ví d , trong m t bài toán tin h c khi
ph m vi giá tr c a nó,
c p
n m t s nguyên d
ng N ta ph i bi t rõ
l a ch n cách th hi n N b"ng ki u d li u thích h p.
Trang 4
B
c 2: L a ch n ph
double tan(double x) ;
ng pháp gi i
M i bài toán có th gi i b"ng nhi u ph
nào cho bài toán c n gi i quy t ph thu c ng
ph
Trang 153
ng pháp khác nhau. Vi c ch n ph
i l p trình, tuy nhiên m t ph
Tính tg c a x
ng pháp
ng pháp t t là
asin,acos,atan
Các hàm l
ng pháp v a gi n d và cho hi u qu cao khi gi i bài toán ó.
B
ng giác ng
c (tham s các hàm l
ng giác là radian)
c 3: Thi t k thu t toán
Thi t k thu t toán ph thu c vào b
c l a ch n ph
ng pháp gi i. M i ph
ng pháp
gi i có th t
ng ng v i nhi u thu t toán khác nhau. B
c thi t k thu t toán là b
c quan
tr ng nh t
gi i m t bài toán. M i thu t toán ch gi i m t bài toán nào ó, nh ng có th có
nhi u thu t toán khác nhau cùng gi i m t bài toán. C n ch n m t thu t toán phù h p
gi i
c bi u di#n b"ng ngôn ng t nhiên, mã gi , l u $-s
bài toán ã cho. Thu t toán có th
$
ctype.h
int isalnum(int c);
Ki m tra c là ký t (ch cái ho c ch s ) hay không ?
int isalpha(int c);
Ki m tra c là ch cái hay không ?
int isdigit(int c);
kh i, hay b"ng m t ngôn ng l p trình c th .
Ki m tra c là ch s hay không ?
Khi l a ch n thu t toán ng
thi trên máy tính, s l
i ta th
ng quan tâm
n các tài nguyên nh th i gian th c
ng b nh c n dùng,... Hai tài nguyên v th i gian và b nh th
ng
mâu thu!n nhau, nói cách khác yêu c u v th i gian và b nh là t% l ngh ch nhau. &i u này
òi h'i ng
i l p trình ph i cân nh(c gi a hai yêu c u này. Trong các lo i tài nguyên, ng
quan tâm nhi u nh t
n th i gian vì ó là d ng tài nguyên không tái t o
Trong th c t , khi l a ch n thu t toán ng
cho thu t toán ó
Vi c vi t ch
ngôn ng l p trình
ng trình
Khi vi t ch
gi i m t bài toán c th c n c n c vào l
ng tài
ng tài nguyên th c t cho phép.
t úng thu t toán.
ng trình ta c n l a ch n m t ngôn ng b c cao, ho c h p ng , ho c
c 5: Hi u ch nh ch
Sau khi
Ki m tra xem ký t c là ký t tr ng ?
ng
int toascii(int c);
Chuy n ký t c thành mã ASCII
B ng mã ASCII
B mã ASCII g$m 256 ký t
-32 ký t
ng trình
c vi t xong, ch
Chuy n ký t c thành ch th
Chuy n ký t c thành ch hoa.
ng trình
ngôn ng máy, ho c m t ph n m m chuyên d ng thích h p cho thu t toán ã l a ch n.
B
Ki m tra c là ch cái hoa hay không ?
int toupper(int c);
ng trình là m t t)ng h p h u c gi a vi c l a ch n c u trúc d li u và
di#n
ng hay không ?
int tolower(int c);
nguyên mà thu t toán òi h'i và l
c 4: Vi t ch
Ki m tra c là ch cái th
isupper(int c);
int isspace(int c);
i ta còn quan tâm t i vi c vi t ch
c d# dàng.
Vi c thi t k và l a ch n thu t toán
B
i ta
c.
int isalower (int ct);
ng trình v*n còn có th có nhi u l i khác nhau. Các l i
u tiên là các ký t
c phân b nh sau:
i u khi n không in
c nh ký t enter (mã 13), ký t
ESC (mã 27), 32 là ký t kho ng tr(ng.
-Các mã ASCII 33-47,58-64,91-96 và 123-127 là các ký t
c phân làm hai lo i là các l i v cú pháp và các l i v ng ngh+a.
ph!y, d u cách, d u ngo c, d u móc, d u h'i,…
Vi t ch
ngôn ng
cú pháp.
ó. Ch
ng trình trong ngôn ng nào ta c n ph i tuân theo úng quy
ng trình d ch có th giúp ta phát hi n và thông báo
y
nh cú pháp c a
các sai sót v m t
-Các mã ASCII 48-57 là 10 ch s .
-Các mã ASCII 65-90 là các ch cái hoa t A
-Các mã ASCII 97-122 là các ch cái th
n Z.
ng t a
n z.
c bi t nh d u ch m, d u
Trang 152
Trang 5
Ch
stdlib.h
void randomize();
Kh i
úng m c dù ã không còn l i v cú pháp. Các
b"ng cách th c hi n nó v i m t s b Input tiêu bi u ph thu c vào
ng c ch t o s ng*u nhiên
Các b Input này g i là các b Test. N u có sai sót, ta ph i s a ch
void random(int n)
Tr v s nguyên trong kho ng 0
trình này
n n-1.
unsigned int rand();
B
Cho m t giá tr ng*u nhiên trong kho ng 1.. 32767
và h
m bàn phím, l nh này th
li u nh gets ho c scanf
ng
c s d ng tr
c g i là hi u ch nh ch
c các l nh nh p
ng trình
c thù c a bài toán.
ng trình r$i th l i. Quá
ng trình.
c 6: Vi t tài li u
Tài li u ph i mô t chi ti t bài toán, thu t toán, ch
void flushall();
Xoá vùng
ng trình có th không cho k t qu
l i này là l i v ng ngh+a. & phát hi n các l i v ng ngh+a, c n ph i th ch
ng d*n s d ng. Tài li u này r t có ích cho ng
ng trình, k t qu th nghi m
i s d ng ch
ng trình và cho vi c
xu t nh ng kh n ng hoàn thi n thêm.
Các b
c trên có th l p i l p l i nhi u l n cho
n khi mà ta cho là ch
ng trình
ã làm vi c úng (n.
math.h
double sqrt(double x) ;
Xác
C n b c hai
v n
double exp(double x) ;
nh
- bài toán
Tính ex
L a ch n
double pow(double x, double y);
ph
Bi u di#n b"ng:
ng pháp gi i
•
•
•
Tính xy
Thi t k
int abs(int x) ;
Tr tuy t
thu t toán
i c a ki u s int
double fabs(double x) ;
Tr tuy t
i c a ki u s float,double
long int labs(long int x) ;
Tr tuy t
Ngôn ng t nhiên
L u
-S
kh i
Ngôn ng l p trình
L i cú pháp
Vi t ch
ng trình
L i ng ngh a
i c a ki u s long
Hi u ch nh
double ceil(double x) ;
ch
ng trình
Làm tròn s lên ( i v i s th c)
Vi t Tài Li u
double floor(double x) ;
Làm tròn s xu ng( i v i s th c)
Hình 1.1
double log(double x) ;
Tính logarit t nhiên c a x
! "
#$ %&
Các b
c gi i bài toán b"ng máy tính
$'
double sin(double x) ;
Tính sin c a x
double cos(double x) ;
Tính cos c a x
Thu t toán là m t chu i các ch d*n (hay các qui t(c) c n th c hi n theo t ng b
nh nh"m gi i quy t m t v n
nhiên, mã gi , s
, hay bài toán. Thu t toán có th
$, ho c th m chí là m t ngôn ng l p trình.
c xác
c mô t b"ng ngôn ng t
Trang 6
()
*
+,
$'
u vào (Input):
M i thu t toán có th không có ho c có m t s d li u ban
u ra (Output):
M i thu t toán ph i có ít nh t m t d li u k t qu .
u.
Các ch d*n, qui t(c
Tính k t thúc:
Thu t toán ph i d ng sau m t s h u h n b
Tính úng %n:
Thu t toán ph i cho ra k t qu chính xác theo yêu c u c a bài
Tính t'ng quát:
Thu t toán ph i áp d ng
Tính kh thi:
M i thu t toán ph i có th th c hi n thành công trong kho ng
m ib
c ph i rõ ràng.
c
/$ 0 1
ng
cg i
Nh p ký t
void puts(char *s);
c p trong giáo trình này).
Xu t chu i
$'
void gets(char *s);
Nh p chu i
$ kh i,
void fflush(stdin);
ngôn ng mã gi ho c m t ngôn ng l p trình c th .
Giáo trình này s, trình bày cách bi u di#n thu t toán b"ng ngôn ng s
ng mã gi .
Xoá vùng
$ kh i và ngôn
m bàn phím
conio.h
-
. 23 (4 5 6
$ kh i th
Ngôn ng s
Xu t ký t
void getchar (char c);
& bi u di#n m t thu t toán có th s d ng ngôn ng t nhiên, ngôn ng s
!!
ng s d ng t p ký hi u c a ngôn ng s
void clrscr();
$ kh i sau:
Xoá màn hình
void gotoxy(int x, int y);
& a i m nháy
B(t
u/K t thúc
n to
x,y trên màn hình
void textcolor(int color)
& t màu ch m i
Nh p d li u
void textbackground(int color)
& t màu n n m i
void getch();
Xu t d li u
Nh p ký t ( không hi n ra màn hình)
void getche();
Nh p ký t (có hi n ra màn hình)
X lý
G i ch
ng trình con/hàm
NG S
ng C chu!n)
void putchar (char c);
c tr ng trên g i là các thu t toán có l i gi i úng (các thu t
toán cho l i gi i g n úng nh : x p x , ng*u nhiên, heuristic, metaheuristic,... th
.
(trong môi tr
stdio.h
c cho các bài toán cùng lo i.
th i gian h u h n.
-
HÀM CHU N TH
c.
toán.
Nh ng thu t toán có các
PH L C
M TS
Tính xác +nh:
là các thu t gi i, và không
Trang 151
D NG
Trang 150
&i u ki n
#$ KI(M TRA TH)C HÀNH
H*C PH+N C% S& L'P TRÌNH (90 phút-
Trang 7
s 18)
Lu$ng x lý
B n i
Cho dãy a g$m n s nguyên d
ng ao,a1,a2,...,an-1. Vi t m t ch
ng trình hoàn ch nh th c hi n
các công vi c sau:
Hình 1.2
CÂU 1 (2 i m)
& ms l
s
ng s
$ kh i thông d ng
Các s
i x ng có t hai ch s tr lên trong dãy a. Ví d 11, 121, 64446,… là các
Sau ây là bi u di#n các c u trúc b"ng ngôn ng s
i x ng.
,7
CÂU 2 (2 i m)
Tìm dãy b, bi t s bi là vi t
o ng
c c a s ai; ví d ai =5334 thì bi t
ng ng là 4335.
$ kh i
8$ *9 *:
D ng 1 (d ng thi u)
CÂU 3 (2 i m)
& ms l
ng s c a dãy a th'a i u ki n: 2 s li n k trái/ph i v i nó là s nguyên t .
i u ki n
CÂU 4 (2 i m)
Tìm dãy c, bi t ci là s l
ng các s nguyên t nh0 h n ai; ví d ai =18 thì ci t
ng ng là 7.
úng
CÂU 5 (2 i m)
Tìm
công vi c
dài c a dãy con liên ti p dài nh t c a dãy a ch a toàn s nguyên t .
B test tham kh o
INPUT
Hình 1.3 S
$ c a c u trúc r, nhánh-d ng 1
12
Mô t ho t
7 18 101 242 102 101 122 31 5 41 121 102
N u < i u ki n> là úng thì s, th c hi n <công vi c>, n u < i u ki n> là sai thì s,
OUTPUT
ng
không th c hi n <công vi c>.
Cau 1 : 4
Ví d 1.3:
Cau 2 : 7 81 101 242 201 101 221 13 5 14 121 201
Bi u di n thu t toán nh p n là s t nhiên ≥ 1, n u n l, thì t ng lên 2 ng $c l i thì gi
Cau 3 : 3
nguyên (s d ng ngôn ng s
Cau 4 : 3 7 25 53 26 25 30 10 2 12 30 26
Cau 5 : 3
H;T
kh i).
Trang 8
Trang 149
#$ KI(M TRA TH)C HÀNH
B(t
H*C PH+N C% S& L'P TRÌNH (90 phút-
u
Nh p n
s 17)
Cho m ng có n phân s , gi thi t t s và m*u s c a m i ph n s là các s nguyên d
ng.
CÂU 1 (2 i m)
In các phân s c a m ng
d ng t i gi n.
CÂU 2 (2 i m)
n mod 2 - 0
Có bao nhiêu phân s có giá tr nh' nh t trong m ng.
CÂU 3 (2 i m)
úng
& m xem trong m ng có bao nhiêu phân s có giá tr l n h n 0 và nh' h n 1.
n= n+2
CÂU 4 (2 i m)
Tìm 3 phân s có giá tr l n nh t khác nhau trong m ng; xu t k t qu
Xu t n
d ng t i gi n, xu t theo
th t gi m.
CÂU 5 (2 i m)
& m xem trong m ng có bao nhiêu phân s ( d ng t i gi n) mà t s và m*u s c a phân s
K t thúc
ó
Hình 1.4
S
$ kh i c a ví d 1.3
u là các s nguyên t ?
B test tham kh o
INPUT
D ng 2 (d ng
y
10
)
sai
i u ki n
úng
2/3
8/6
10/12 7/2
10/4
5/2
7/10
13/11 8/12
4/3
5/6
7/2
5/2
5/2
7/10
5/2
13/11
OUTPUT
Cau 1 : 2/3
Cau 2 : 3
công vi c 2
công vi c 1
Cau 3 : 5
Cau 4 : 7/2
Cau 5 : 7
Hình 1.5
Mô t ho t
S
$ c a c u trúc r, nhánh-d ng 2
H;T
ng
N u < i u ki n> là úng thì th c hi n <công vi c 1>, ng
thì s, th c hi n <công vi c 2>.
4/6
c l i n u < i u ki n> là sai
13/11 2/3
2/3
Trang 148
Trang 9
#$ KI(M TRA TH)C HÀNH
H*C PH+N C% S& L'P TRÌNH (90 phút-
s 16)
!
Cho m ng m t chi u a ch a n s nguyên d
" !"
ng (ki u unsigned long).
Hãy th c hi n các công vi c sau:
Ví d 1.4:
Hãy bi u di n thu t toán gi i ph
CÂU 1 (2 i m).
ng s
Tìm giá tr trung bình c ng các s c a m ng a.
ng trình b c nh t d ng ax + b = 0 (s d ng ngôn
kh i)
CÂU 2 (2 i m)
B(t
u
Tìm t)ng các ch s c a t t c các s c a m ng a.
CÂU 3 (2 i m).
a, b
Tìm s nguyên t nh' nh t c a m ng a; n u m ng a không có s nguyên t nào thì xu t giá tr
0
úng
sai
a=0
CÂU 4 (2 i m).
Cho bi t s l
ng các
c s c a t ng s c a m ng a. 6 có 4
c s là 1,2,3,6
sai
b=0
CÂU 5 (2 i m).
x= - b/a
úng
Bi n )i m i s c a m ng a v s nguyên t nh' nh t l n h n ho c b"ng nó
Pt vô nghi m
Pt có vô s nghi m
Pt có nghi m duy nh t x
B test tham kh o
INPUT
K t thúc
10
101 11 33 44 55 66 10 496 97 28
Hình 1.6 S
OUTPUT
$ kh i c a ví d 1.4
Cau 1: 94.1
M t s b test:
Cau 2: 86
Cau 3: 11
Cau 4: 2 2 4 6 4 8 4 10 2 6
Cau 5: 101 11 37 47 59 67 11 499 97 29
H;T
Test
H s a
H s b
K t qu
test 1
0
0
Ph
ng trinh v s nghi m
test 2
0
2
Ph
ng trinh vô nghi m
test 3
1
3
Ph
ng trinh có nghi m duy nh t x=3
test 4
1
-4
Ph
ng trinh có nghi m duy nh t x=4
Trang 10
7
Trang 147
8$ *9 ;)<
#$ KI(M TRA TH)C HÀNH
bi u th c 1
D ng 1:
H*C PH+N C% S& L'P TRÌNH (90 phútCho m ng 1 chi u a ch a n s nguyên d
bi u th c 2
s 15)
ng (ki u unsigned long).
Hãy th c hi n các công vi c sau:
i u ki n
sai
úng
CÂU 1 (2 i m)
công vi c
Thoát
Tìm giá tr l n nh t, giá tr nh' nh t c a m ng a.
CÂU 2 (2 i m)
Hình 1.7
S
$ c a c u trúc l p d ng 1
Tìm t ng các ch s c a t t c các s c a m ng a.
CÂU 3 (2 i m)
Mô t ho t
Tìm s nguyên t l n nh t c a m ng a; n u m ng a không có s nguyên t nào thì xu t giá tr
ng
& u tiên s, th c hi n <bi u th c 1>, sau ó ki m tra < i u ki n>. N u < i u ki n> là
úng thì s, th c hi n <công vi c> r$i
n th c hi n <bi u th c 2>; sau khi th c hi n xong
th c 2> thì c u trúc này quay tr l i ki m tra < i u ki n> và b(t
nh th
u m t vòng l p m i,…c
n khi < i u ki n> nh n giá sai thì c u trúc l p này s, k t thúc.
0.
CÂU 4 (2 i m)
& m xem trong m ng a có bao nhiêu s nguyên t .
CÂU 5 (2 i m).
Tính t)ng các
B test tham kh o
L u ý:
<bi u th c 1> th
th c 2> th
th
ng là phép gán giá tr+ kh i
ng là phép gán
u c!a bi n i u khi n vòng l-p,
thay 'i giá tr+ c!a bi n i u khi n vòng l-p, còn < i u ki n>
ng là m t phép so sánh bi n i u khi n vòng l-p v i s l n l-p. Trong quá trình l-p l i
này, <công vi c>
c s (không k chính nó) c a m i s c a m ng a. Ví d 6 có các
n m t lúc nào ó ph i nh n giá tr+ sai
vòng l-p k t thúc.
INPUT
10
101 11 33 44 55 66 77 88 97 102
OUTPUT
Cau 1: 102
11
Cau 2: 89
Cau 3: 101
Cau 4: 3
Cau 5: 1
1
15
40
17
78
H;T
19
92
1
114
c s 1,2,3
Trang 146
2
2
4
2
2
8
4
5
3
5
2
7
1
4
6
2
7
3
7
3
4
4
3
7
Trang 11
Ví d 1.5:
4
5
Bi u di n thu t toán tính tích p = n!=1.2...n (s d ng ngôn ng s
CAU 3:
B(t
what happiness
kh i).
u
do you
n
it unhappy
a heart
sai
CAU 4: n u n là 14 thì có k t qu :
n>=0
what if it can not buy happiness
úng
do time on a man who is not willing to waste their time on you
n không h p l
i=1
it yourself that makes you happy or unhappy
p=1
a someone who reaches for your hand and touches your heart
CAU 5:
i=i+1
buy can good happiness if is it money not what
sai
i<=n
p
úng
a do is man not not on on their time time to waste waste who willing you your
happy in is is it makes or that unhappy what you yourself
K t thúc
p=p*i
a and for friend hand heart is reaches someone touches true who your your
H;T
Hình 1.8 S
$ kh i c a ví d 1.5
M t s b test:
Test
N
P
test 1
-1
n không h p l
test 2
0
1
test 3
1
1
test 4
10
Trang 12
Trang 145
#$ KI(M TRA TH)C HÀNH
D ng 2:
H*C PH+N C% S& L'P TRÌNH (90 phút-
s 14)
sai
VI;T CH<=NG TRÌNH HOÀN CH>NH TH?C HI@N CÁC YÊU CAU SAU:
i u ki n
Cho file THI.INP có nhi u chu i, m i chu i trên m t dòng, m i chu i ch a các ký t ch cái
th
úng
ng ti ng Anh và kho ng tr(ng, gi a các t có úng m t kho ng tr(ng,
u và cu i m i
chu i không có kho ng tr(ng.
Hãy l p trình th c hi n các công vi c sau:
công vi c
Thoát
CÂU 1 (2.0 ).
Tìm m t chu i dài nh t trong s các chu i c a file, cho bi t chi u dài c a chu i tìm
Hình 1.9 S
$ c a c u trúc l p d ng 2
Tìm s l
Mô t ho t
vi c> thì s, quay tr l i ki m tra < i u ki n> và b(t
u m t vòng l p m i,…c nh v y vòng
Rõ ràng v i c u trúc này thì trong <công vi c> ph i có m t giai o n mà
vòng l p k t thúc nh
ã phân tích
T o các chu i con
c ghép t t1
u tiên và t1 cu i cùng c a m i chu i, gi a hai t này có
m t kho ng tr(ng.
CÂU 4 (2.0 ).
n khi nào < i u ki n> nh n giá tr sai thì k t thúc.
ki n> ph i mang giá tr sai
ng ký t c a m i t trong m i chu i.
CÂU 3 (2.0 ).
ng
N u < i u ki n> là úng thì s, th c hi n <công vi c>, sau khi th c hi n xong
l p ti p t c
c.
CÂU 2 (2.0 ).
trên.
ó< i u
Xóa n ký t trong m i chu i b(t
u t v trí
u tiên c!a t1 th 2 c a chu i ó.
CÂU 5 (2.0 ).
Xem m i t trong m i chu i là m t chu i con. Hãy s(p x p các chu i con (trong m i chu i)
t ng d n.
BB TEST THAM KHCO
THI.INP
what good is money if it can not buy happiness
do not waste your time on a man who is not willing to waste their time on you
it is what is in yourself that makes you happy or unhappy
a true friend is someone who reaches for your hand and touches your heart
THI.OUT
CAU 1:
do not waste your time on a man who is not willing to waste their time on you
77
CAU 2:
4
4
2
5
2
2
3
3
3
9
2
3
5
4
4
2
1
3
3
2
3
7
2
5
5
4
2
3
Trang 144
Trang 13
a 17
Ví d 1.6:
b1
Bi u di n thu t toán tìm
c3
ngôn ng s
c s chung l n nh t c!a 2 s nguyên d
kh i).
d5
B(t
e 17
u
… // yêu c u li t kê h t
y 10
a,b
CAU 3:
happiness
1
willing
yourself
sai
a-b
someone
CAU 4:
UCLN=a
úng
happiness buy not can it if money is good what
UCLN
a>b
you on time their waste to willing not is who man a on time your waste not do
úng
unhappy or happy you makes that yourself in is what is it
a=a-b
b=b-a
heart your touches and hand your for reaches who someone is friend true a
K t thúc
sai
CAU 5:
good is money
not waste your
Hình 1.10 S
is what is
$ kh i c a ví d 1.6
M t s b test:
true friend is
H;T
test 1
test 2
test 3
test 4
A
18
4
101
3
B
12
18
103
1000000
K t qu
6
2
1
1
ng a,b (s d ng
Trang 14
Trang 143
D ng 3
#$ KI(M TRA TH)C HÀNH
công vi c
H*C PH+N C% S& L'P TRÌNH (90 phút-
s 13)
VI;T CH<=NG TRÌNH HOÀN CH>NH TH?C HI@N CÁC YÊU CAU SAU:
Cho file THI.INP có nhi u chu i, m i chu i trên m t dòng, m i chu i ch a các ký t ch cái
úng
i u ki n
sai
Thoát
th
ng ti ng Anh và kho ng tr(ng, gi a các t có úng m t kho ng tr(ng,
u và cu i m i
chu i không có kho ng tr(ng.
Hãy l p trình th c hi n các công vi c sau:
Hình 1.11 S
Mô t ho t
Tr
$ c a c u trúc l p d ng 3
& m xem file THI.INP có t t c bao nhiêu t ?
ng
c h t <công vi c> s,
ki n> là úng thì l i b(t
c th c hi n, sau ó th c hi n < i u ki n>. N u < i u
u m t vòng l p m i,…c nh v y
n khi < i u ki n> sai thì c u
ng t nh s
CÂU 2 (2.0 ):
Tìm t n s xu t hi n c a m i ký t (khác kho ng tr(ng) trong file THI.INP? (Ký t a xu t
hi n bao nhiêu l n ? Ký t b xu t hi n bao nhiêu l n ?...)
trúc l p này k t thúc.
T
CÂU 1 (2.0 ):
$
d ng 2, sau m t s l n l p < i u ki n> ph i mang giá tr sai
CÂU 3 (2.0 ):
Tìm m t t dài nh t cho m i chu i trong file THI.INP.
vòng l p k t thúc
CÂU 4 (2.0 ):
.
& o ng
L u ý:
C u trúc l p d ng 3 th
c a d li u nh p.
ng dùng khi c n nh p d li u và c n ki m tra i u ki n h p l
c các t trong m i chu i c a file THI.INP, trong ó th t các ký t trong m i t
gi nguyên.
CÂU 5 (2.0 ):
Tìm các chu i con ch a các t th 2,3,4 c a m i chu i trong file THI.INP;
u và cu i chu i
con này không có kho ng tr(ng, gi a các t c a chu i con có m t kho ng tr(ng.
K t qu ghi vào file THI.OUT theo c u trúc nh minh h a
b test tham kh o sau.
BB TEST THAM KHCO
THI.INP
what good is money if it can not buy happiness
do not waste your time on a man who is not willing to waste their time on you
it is what is in yourself that makes you happy or unhappy
a true friend is someone who reaches for your hand and touches your heart
THI.OUT
CAU 1:
54
CAU 2:
Trang 142
CAU 1:
7
7
12
13
13
Ví d 1.7:
CAU 2: 121 8128 407 31013 31013
CAU 3:
28
CAU 4:
32
CAU 5:
4
Trang 15
Vi t ch
ng trình ki m tra password (s d ng ngôn ng s
kh i).
3
B(t
u
H;T
Nh p P
úng
P - password
B n ã nh p sai password.
Hãy nh p l i!
sai
B n ã nh p úng password.
K t thúc
Hình 1.12 S
$ kh i c a ví d 1.7
Ví d 1.8:
Vi t ch
ng trình nh p m t s nguyên d
B(t
ng n (s d ng ngôn ng s
u
a
n
Nh p n
n<=0
kh i).
úng
B n ã nh p d li u
không h p l , nh p l i!!
sai
a
Hình 1.13 S
$ kh i c a ví d 1.8
K t thúc
Trang 16
!!!
-
.
'< 5>
B(t
Trang 141
=
#$ ?
#$ KI(M TRA TH)C HÀNH
@
-
u o n l nh:
H*C PH+N C% S& L'P TRÌNH (90 phút-
. A BB7
s 12)
{
}
VI;T CH<=NG TRÌNH HOÀN CH>NH TH?C HI@N CÁC YÊU CAU SAU:
L nh nh p d li u:
cin>>
Cho file THI.INP ch a các s nguyên trong ph m vi 0
L nh xu t d li u :
cout<<
kho ng tr(ng.
L nh x lý d li u:
=
CÂU 1 (2.0 ).
Bi u th c i u ki n:
if (< i u ki n>)
THI.INP có bao nhiêu s chính ph
Ghi chú:
//
? Bao nhiêu s nguyên t ? Bao nhiêu s
K t thúc o n l nh:
/$ 0 1
,7
ng ? Bao nhiêu s hoàn ch nh ? Bao nhiêu s Armstrong
i x ng ?
CÂU 2 (2.0 ).
8$ *9
Trong THI.INP tìm s chính ph
8$ *9 *:
s nguyên t l n nh t, s
D ng 1
l n nh t
if (< i u ki n>)
Mô t ho t
n 99999. Các s cách nhau ít nh t m t
ng l n nh t, s hoàn ch nh l n nh t, s Armstrong l n nh t,
i x ng l n nh t (s có tính ch t nào không
c tìm th y thì giá tr
c tính là 0).
CÂU 3 (2.0 ).
<công vi c>;
S nào trong THI.INP xu t hi n nhi u l n nh t và xu t hi n bao nhiêu l n ?
ng
CÂU 4 (2.0 ).
N u < i u ki n> là úng thì th c hi n <công vi c>, n u < i u ki n> là sai thì s, không
th c hi n <công vi c>.
L u ý: N u <công vi c> có t hai câu l nh
THI.INP ch a bao nhiêu s có giá tr khác nhau ?
CÂU 5 (2.0 ).
n tr lên thì c n
t <công vi c> gi a hai
d u { }.
THI.INP có bao nhiêu b 3 s x,y,z (x < y < z) th'a mãn x2 + y2 = z2 ?
K t qu câu 1 g$m 5 s nguyên
c ghi trên m t dòng; là k t qu t
ng ng tìm
c.
Ví d 1.9:
K t qu câu 2 g$m 5 s nguyên
c ghi trên m t dòng; là k t qu t
ng ng tìm
c.
Bi u di n thu t toán nh p n là s t nhiên ≥ 1, n u n l, thì t ng lên 2 ng $c l i thì gi nguyên
K t qu câu 3 g$m 2 s nguyên
c ghi trên m t dòng; là k t qu t
ng ng tìm
c.
(s d ng ngôn ng mã gi ).
K t qu câu 4 g$m 1 s nguyên; là k t qu t
ng ng tìm
c.
cin>>n;
K t qu câu 5 g$m 1 s nguyên; là k t qu t
ng ng tìm
c.
if (n mod 2 - 0)
K t qu ghi vào file THI.OUT.
{
n=n+2;
BB TEST THAM KHCO
cout<
THI.INP
}
407
121
28
8128
49
25
36
153
370
101
153
97
71
93
111
4
3
1
29
13
5
19
103
16
496
28
11
31013
5
8
6
79
D ng 2
if (< i u ki n>)
32
<công vi c 1>;
else
10
28
<công vi c 2>;
34
6
THI.OUT
Trang 140
17
211
47
59
6
31
213
31
3
801
127
19
1011
213
41
Trang 17
53
Mô t ho t
101
11
5
101
31013
THI.OUT
111
117
ng
N u < i u ki n> là úng thì s, th c hi n <công vi c 1>, ng
sai thì <công vi c 2> s,
7
c l i n u < i u ki n> là
c th c hi n.
CAU 1:
26
CAU 2:
602
Hãy bi u di n thu t toán gi i ph
CAU 3:
3
(s d ng ngôn ng mã gi )
CAU 4:
20
cin>>a>>b>>c;
CAU 5:
7
Ví d 1.10:
if (a=0)
ng trình (Pt) b c hai d ng ax2 + bx+c = 0
//Pt b c nh t
if (b=0)
H;T
if (c=0)
cout<<”Pt có vô s nghi m s ”;
else // b=0 và c-0
cout<<”Pt có vô nghi m”;
else
// a=0 và b-0
{
x=-c/b;
cout << “Pt có nghi m duy nh t: ”<
}
else
{
//a-0
Delta=b*b-4*a*c;
if (Delta<0)
cout<<” Pt có vô nghi m”;
else
// Delta>=0
if (Delta=0)
{
x=-b/(2*a);
cout << “Pt có nghi m kép: ”<
}
else
{
cout << “Pt có hai nghi m: ”<< “x1=”<
}
}
// k t thúc else
//a-0
Trang 18
7
Trang 139
8$ *9 ;)<
#$ KI(M TRA TH)C HÀNH
H*C PH+N C% S& L'P TRÌNH (90 phút-
s 11)
D ng 1
for (<bi u th c 1>; < i u ki n>; <bi u th c2>)
VI;T CH<=NG TRÌNH HOÀN CH>NH TH?C HI@N CÁC YÊU CAU SAU:
<công vi c>;
Mô t ho t
Cho file THI.INP ch a các s nguyên trong ph m vi 0
ng
& u tiên s, th c hi n <bi u th c 1>, sau ó ki m tra < i u ki n>. N u < i u ki n> là
úng thì s, th c hi n <công vi c> r$i
n <bi u th c 2>; sau khi th c hi n xong <bi u th c 2>
thì c u trúc này quay tr l i ki m tra < i u ki n> và b(t
u m t vòng l p m i,…c th v y
n khi < i u ki n> nh n giá tr sai thì c u trúc l p này s, k t thúc.
kho ng tr(ng.
CÂU 1 (2.0 ).
S nguyên t Palindrome là s mà khi vi t các ch s c a nó theo chi u t trái qua ph i hay t
ph i qua trái thì ta cùng
c m t k t qu . Ví d 2, 3, 151, 19891, 19991 là các s nguyên t
Palindrome. & m xem file THI.INP có bao nhiêu s nguyên t ? Bao nhiêu s nguyên t
Ví d 1.11:
Bi u di n thu t toán tính t'ng s= 12+22+…+n2 (s d ng ngôn ng mã gi ).
cin>> n;
Palindrome?
CÂU 2 (2.0 ).
Hai s nguyên d
if (n<0)
ng a,b
c g i là nguyên t cùng nhau n u
c s chung l n nh t c a chúng
b"ng 1. Ch ng h n các c p (3,4), (8,9), (1,6) là nguyên t cùng nhau.
cout <<”n không h p l ”;
& m xem file THI.INP có bao nhiêu c p s nguyên t cùng nhau ?
else
{
n 99999. Các s cách nhau ít nh t m t
CÂU 3 (2.0 ).
s=0;
S nguyên t
for(i=1; i<=n; i++)
i x ng là m t s nguyên t b"ng trung bình c ng c a hai s nguyên t li n tr
và li n sau nó. V i
là s nguyên t th
n, m t s nguyên t là
c
i x ng khi tho :
s=s+i*i;
cout<
& m xem file THI.INP có bao nhiêu s nguyên t
}
D ng 2
CÂU 4 (2.0 ).
& m xem file THI.INP có bao nhiêu s nguyên t khác nhau (m i giá tr nguyên t ch
while (< i u ki n>)
Mô t ho t
i x ng ?
<công vi c>;
tính là m t l n).
ng
CÂU 5 (2.0 ).
N u < i u ki n> là úng thì s, th c hi n <công vi c>, sau ó quay tr l i th c hi n
S Mersenne là s bi u di#n
cd
c
i d ng 2n − 1. S nguyên t Mersenne là s th'a hai tính
< i u ki n>. Vòng l p while này s, k t thúc khi < i u ki n> là sai.
ch t: là s Mersenne và là s nguyên t . Ví d 31 là s nguyên t Mersenne vì 31 = 25 − 1, và
Ví d 1.12:
31 là s nguyên t . L u ý r"ng, trong bi u di#n s Mersenne, n u n là s nguyên t thì 2n – 1 là
Bi u di n thu t toán tìm
c s chung l n nh t c!a 2 s nguyên d
mã gi ).
ng a,b (s d ng ngôn ng
s nguyên t Mersenne. & m xem file THI.INP có bao nhiêu s nguyên t Mersenne ?
K t qu ghi vào file THI.OUT theo c u trúc nh minh h a
cin>>a>>b;
BB TEST THAM KHCO
r=a mod b; // r s d c a phép chia a cho b
THI.INP
while (r - 0)
123
{
23
1191
121
223
4
41
127
8191
b test tham kh o sau.
199
19
103
43
3
Trang 138
Trang 19
a=b;
#$ THI C% S& L'P TRÌNH (90 phút-
s 10)
b=r;
r= a mod b;
}
CÂU 1 (2 i m)
Vi t ch
ph
cout<
ng trình nh p s t nhiên n. Hãy in ra ch s th n c a dãy vô h n các s chính
D ng 3
ng 149162536496481100121….
do
CÂU 2 (2 i m)
{
V i m i s nguyên n ≥ 1, s Xn
<công vi c>;
c tính nh sau :
}
X1=1, X2=1
while (< i u ki n>);
Xn=Xn-1 + (n-1)Xn-2 v i n ≥3
Vi t hàm tính Xn b"ng ph
Mô t ho t
ng pháp
Vi t hàm tính Xn không dùng
quy.
Tr
quy.
ng
c h t <công vi c> s,
c th c hi n, sau ó ki m tra < i u ki n>. N u < i u ki n>
là úng thì quay tr l i th c hi n <công vi c> và b(t
CÂU 3 (3 i m)
này s, k t thúc khi < i u ki n> nh n giá tr sai.
Cho m ng g$m n s nguyên d
Ví d 1.13:
ng. Hãy th c hi n các yêu c u sau:
a.Ki m tra xem trong m ng có t$n t i s chính ph
ng nào hay không ? N u có tr v giá tr 1,
Vi t ch
ng trình ki m tra password (s d ng ngôn ng s mã gi ).
n u không có tr v giá tr 0.
do
b.Tìm k giá tr khác nhau l n nh t c a m ng.
{
cin>>p;
c.Hãy tìm h ng c a các ph n t .
if (p - password)
CÂU 4 (3 i m)
Cho file v n b n songuyen.inp ch a các s nguyên d
c. & nh ngh+a s
chính s
cout<< “B n ã nh p sai password. Hãy nh p l i!!”
ng.
}while (p - password);
i x ng là s mà khi vi t các ch s c a nó theo chi u ng
c l i thì ta
c
i x ng. & m xem file songuyen.inp ch a
ó; ch ng h n 6, 131, 1991 là các s
bao nhiêu s
u m t vòng l p m i. Vòng l p do while
cout<<”B n ã nh p úng password”;
C DE < F
i x ng ?
d. & m xem trong file songuyen.inp có bao nhiêu s v a là s nguyên t v a là s
K t qu xu t ra file songuyen.out ghi hai s nguyên là k t qu tìm
c.
G< +,
E
$'
i x ng ?
Tính hi u qu c a m t thu t toán th hi n qua th i gian mà máy tính s d ng
bài toán theo thu t toán ó, khi các giá tr
Ví d :
songuyen.inp
songuyen.out
4
11
4
100
101
34
4
45
2
23
c a thu t toán còn
khi các giá tr
nh c n
u vào có m t kích th
c th hi n qua dung l
u vào có kích th
c xác
ng b nh c n có
phân tích th i gian c n thi t
c xác nh. Tính hi u q u
th c hi n thu t toán ó
nh. Hai tiêu chí v th i gian và dung l
th c hi n m t thu t toán có liên quan
n
gi i m t bài toán có kích th
gi i
ng b
ph c t p c a m t thu t toán. S
c
c bi t nào ó liên quan
n
ph c t p th i gian c a thu t toán. S phân tích b nh c n thi t c a máy tính liên quan
H t
Trang 20
Trang 137
ph c t p không gian c a thu t toán. & ph c t p th i gian và không gian c a m t
n
thu t toán là m t v n
h t s c quan tr ng
m t thu t toán có th là m t micro giây, m t phút, m t n m ho c m t t n m, là h t s c
quan tr ng vì i u này nói lên tính kh thi c a m t thu t toán. T
mà thu t toán òi h'i ph i là kh d ng
c.ng c n ph i tính
d li u
c bi t
xem xét
c dùng
th c hi n thu t toán nên trong tài li u này ta s, ch t p trung
ph c t p th i gian.
n ng l p trình, ch
ng ph thu c vào các y u t nh k/
th c hi n các phép tính trên máy tính, kích th
cc a
c l u vào ba bi n nguyên: dd/mm/yy. Gi s các giá tr này là ã h p
l - không c n ki m tra.
Hãy vi t hàm xác
nh ngày mai (t c là ngày k sau c a ngày dd/mm/yy)
CÂU 2 (3 i m)
a.S(p x p theo th t t ng d n
b.S(p x p theo tr tuy t
i t ng d n
c.Tìm các c p s nguyên t sinh ôi trong dãy (là các c p s mà kho ng cách giá tr c a chúng
u vào,…
Do s l
Ngày hi n t i
Cho m ng m t chi u g$m n s th c a0,a1,an-1. Hãy vi t các hàm th c hi n các yêu c u sau:
ng trình d ch, t c
ng các phép tính và kích th
thu c vào t c
toán
ph c t p không gian
s 09)
CÂU 1 (2 i m)
ng b nh
ph c t p không gian g(n li n v i các c u trúc
& ph c t p th i gian c a m t thu t toán th
d li u
ng t , dung l
gi i m t bài toán,vì v y
n. Vì vi c xem xét
#$ THI C% S& L'P TRÌNH (90 phút-
i v i các thu t toán. & ph c t p th i gian c a
c d li u
tính toán c a các máy tính c th nên
c bi u di#n qua s l
u vào có m t kích th
ng các phép toán
c xác
u vào trong gi i thu t là không ph
ph c t p th i gian c a m t thu t
c dùng b i thu t toán ó khi các d li u
nh. H n n a, phân tích t t c các phép toán thành các phép
tính bit s c p mà máy tính s d ng là i u r t ph c t p. Do ó ta có th
i
n khái ni m v
b"ng 2, ví d 17 và 19 là c p s sinh ôi).
CÂU 3 (2 i m)
Tìm các dãy hoán v c a t p g$m n ph n t {1,2,3,…,n} v i n là s nguyên d
Ví d n=3 thì k t qu là:
1 2 3; 1 3 2; 2 1 3; 2 3 1; 3 1 2; 3 2 1;
CÂU 4 (3 i m)
Cho file v n b n songuyen.inp ch a các s nguyên d
th i gian thu t toán nh sau.
ng.
ng; các s cách nhau ít nh t m t kho ng
tr(ng.
H
Th
,
I
#
$'
a. Tìm s l n nh t và s l n th nhì trong file songuyen.inp
c o th i gian c a m t thu t toán là m t hàm bi u di#n s phép toán s c p (phép
toán s h c, phép toán logic, phép so sánh) trong khi th c hi n thu t toán và th
kích th
c các giá tr d li u
b. S nguyên t x
nguyên t k tr
ng ph thu c
c g i là s nguyên t
c (ký hi u là p) và k sau c a nó (ký hi u là q), t c là p+q=2*x. & m xem
trong file songuyen.inp có bao nhiêu s nguyên t
u vào là n, kí hi u hàm này là T(n).
-Dòng th nh t ghi s l n nh t và s l n th nhì.
N u th i gian th c hi n m t thu t toán là T1(n) = n2 và th i gian th c hi n c a m t
thu t toán khác là T2(n) = 50n thì khi n
l n th i gian th c hi n c a gi i thu t T2 rõ ràng
-Dòng th hai ghi s l
songuyen.inp
Khi ó, th i gian th c hi n thu t toán t l thu n v i n hay t l thu n v i n2 c.ng cho ta m t
4
cách ánh giá t
5
62
10
62
53
47
8
53
c p
toán
g i là
iv t c
th c hi n c a thu t toán ó khi n khá l n.
ng quan tâm
n các khái ni m liên quan
n
nv n
t ng c a hàm T(n) khi n khá l n. Sau ây, ta s,
này. Cách ánh giá th i gian th c hi n c a thu t
c l p v i máy tính và các y u t liên quan t i máy tính nh v y s, d*n t i khái ni m
ph c t p c a thu t toán.
ng s nguyên t
i x ng tìm
Ví d :
nhanh h n T1, ch ng h n n=50 thì T1(n) = 502 = T2(n) nh ng v i n>50, T1(n) = n2 > 50n=T2(n).
Do ó, ta th
i x ng ?
Ghi k t qu vào file ketqua.out g$m hai dòng:
Ví d 1.14:
ng
i x ng n u nó b"ng trung bình c ng c a hai s
62
3
ketqua.out
62
53
3
H t
c.
Trang 136
#$ THI C% S& L'P TRÌNH (90 phút-
Trang 21
Tr
s 08)
-
CÂU 1 (2 i m)
Vi t ch
ng trình nh p m t thông tin ngày (ngày/tháng/n m) - là các s nguyên d
ng h p t t nh t
Th i gian th c hi n thu t toán nhanh nh t v i b d li u
Tr
ng).
Hãy cho bi t ngày ó là ngày th bao nhiêu trong n m ? (ngày 1 tháng 1 là ngày th nh t c a
-
Th i gian th c hi n thu t toán lâu nh t v i b d li u
Ví d : Ngày 3/2/2012 là ngày th 34 trong n m.
CÂU 2 (2 i m)
Hãy vi t ch
-
tính Sn.
ng trình hoàn ch nh
CÂU 3 (3 i m)
Cho m ng m t chi u g$m n phân s , trong ó t s và m*u s là các s nguyên. Hãy
vi t ch
o
S(p x p theo th t ng
o
Tìm ki m m t ph n t không xu t hi n
o
…
&ánh giá c n trên c a
Tr
Ví d : v i n =4 thì k t qu Sn= 7106
ng”
ng h p x u nh t
n m).
Cho Sn=1.2 + 2.3.4 + 3.4.5.6 +...+ n.(n+1)...(2n)
u vào “lí t
u vào “t$i nh t”
cl i
ph c t p
ng h p trung bình
-
Th i gian th c hi n thu t toán v i b d li u t)ng quát
-
S d ng các công c xác su t
-
& ph c t p tính toán c a thu t toán
ánh giá th i gian th c hi n
ng trình th c hi n các công vi c sau:
5> <
<(
(E < F
G<
$'
a.Hãy tìm phân s có giá tr l n nh t
b.Hãy s(p x p các phân s theo chi u t ng d n.
C!
><
<
?(J ;
;
7
f(n) và g(n) là hai hàm không âm. f(n)
CÂU 4 (3 i m)
O(g(n)) n u t$n t i các h"ng s d
c g i là có
ph c t p là O(g(n)), ký hi u là f(n) =
ng c và n0 sao cho f(n) ≤ c.g(n) v i m i n ≥ n0 .
Cho m t file v n b n có tên là “DAYSO.INP” có c u trúc nh sau:
Hình th c: O(g(n)) = { f(n): ∃ các s c,n0 >0 sao cho f(n) ≤ c ⋅ g(n) ∀ n ≥ n0}
-Dòng
u ghi s nguyên d
ng n.
Ý ngh a:
-Trong các dòng ti p theo ghi n s nguyên d
ng.
T p các hàm có t c
Hãy
c d li u t file và th c hi n các công vi c sau.
a.Tìm giá tr l n nh t c a n s có trong dãy.
b.Hãy
K t qu
ms l
ng s nguyên t có trong dãy.
t ng tr
ng luôn nh'
h n hàm g(n).
Ví d 1.15:
Cho f(n) = 3n3+4n2+5n+6, suy ra
c.Tìm v trí c a k giá tr l n nh t c a m ng
f(n) = 3n3+4n2+5n+6 0 3n3+4n3+5n3+6n3
d.Tìm s nguyên t nh' nh t c a m ng
do ó f(n) 0 18n3 v i m i n 11 nên f(n)=O(n3).
c ghi vào file v n b n có tên là “DAYSO.OUT” m i dòng là k t qu c a m t câu
trên
H t
Hình 1.14 &$ th minh h a cho khái ni m O.
Trang 22
C!! ><
< Ω ?(J ;
@ ,;
7
f(n) và g(n) là hai hàm không âm. f(n)
g i là có
#$ THI C% S& L'P TRÌNH (90 phút-
CÂU 1 (2 i m)
ng c và
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 :
n0 sao cho f(n) ≥ c.g(n) v i m i n ≥ n0 .
S ( x, n ) = − x +
Hình th c: Ω (g(n)) = { f(n): ∃ các s c,n0 >0
x2
x3
xn
−
+ ... + (−1) n
1+ 2 1+ 2 + 3
1 + 2 + 3 + ... + n
CÂU 2 (2 i m)
sao cho f(n) ≥ c ⋅ g(n) ∀ n ≥ n0}
Cho dãy s xn
Ý ngh a: T p các hàm có t c
t ng tr
ng luôn l n h n hàm g(n)
Hình 1.15 &$ th minh h a cho khái ni m Ω
c
nh ngh+a nh sau:
x0 = 1;
x1 = 2;
Ví d 1.16:
xn = nx0 + (n - 1)x1 + … + xn-1
a. Tính giá tr c a x5.
Cho f(n) = n3+2n2+3n, suy ra f(n) = n3+2n2+3n ≥ n+2n+3n=6n do ó f(n) ≥ 6n v i m i n 11
b. V i n ≥ 0, tính xn b"ng cách có s d ng
nên f(n)= Ω (n).
CÂU 3 (3 i m)
C!C ><
< Θ ?(J ;
@ ,7
Cho dãy n s nguyên d
f(n), g1(n) và g2(n) là 3 hàm không âm. f(n)
= Θ (g(n)) n u t$n t i các h"ng s d
qui.
ng a1, a2,..., an. Hãy vi t hàm th c hi n các công vi c sau:
a. Tìm chi u dài c a o n con liên ti p dài nh t ch a toàn s ch4n. N u không có thì tr v
giá tr 0
cm ts
b. Tìm các s nguyên t sao cho khi o ng c các ch s c a nó ta c.ng thu
nguyên t (ví d s 13, s 149,...).
c
ph c t p là Θ (g(n)), ký hi u là f(n)
g i là có
s 07)
c
ph c t p là Ω(g(n)), ký hi u là f(n)
= Ω (g(n)) n u t$n t i các h"ng s d
Trang 135
ng c1, c2
và n0 sao cho c1 ⋅ g(n) ≤ f(n) ≤ c2 ⋅ g(n) v i m i
CÂU 4 (3 i m)
n ≥ n0 .
Cho file v n b n songuyen.inp ch a các s nguyên d ng.
i x ng là s mà khi vi t các ch s c a nó theo chi u ng c l i thì ta
c
a. & nh ngh+a s
chính s ó; ch ng h n 6, 131, 1991 là các s
i x ng. & m xem file songuyen.inp ch a
Hình th c: Θ(g(n)) = { f(n): ∃ các s c1, c2,n0
>0 sao cho c1 ⋅ g(n) ≤ f(n) ≤ c2 ⋅ g(n) ∀ n ≥ n0}
Ý ngh a: T p các hàm có t c
t
ng
t ng tr
ng
Hình 1.16 &$ th minh h a cho khái ni m Θ
ng v i hàm g(n).
Ví d 1.17:
Cho f(n) = n3+2n2+3n, suy ra n3 ≤f(n) = n3+2n2+3n ≤ n3+2n3+3n3=6n3 do ó
n3≤ f(n) ≤ 6n3
v i m i n 11 nên f(n)= Θ( n3).
& nh ngh+a t
ng t các kí pháp l n t
ng ng, thay ≤, ≥ b"ng <, > t
ng 3, m c 3.1.
K t qu xu t ra file songuyen.out ghi hai s nguyên là k t qu tìm
Ví d :
songuyen.inp
4
11
4
100
23
101
34
songuyen.out
4
45
2
H t
M t s kí pháp khác: o (o nh ), ω (omega nh ), θ (theta nh )
Xem thêm Thomas’s book, ch
i x ng ?
bao nhiêu s
b. & m xem trong file songuyen.inp có bao nhiêu s v a là s nguyên t v a là s
ng ng
c.
i x ng ?
Trang 134
Trang 23
L u ý:
#$ THI C% S& L'P TRÌNH (90 phút-
s 06)
Kí pháp O (O l n) ánh giá tr
Kí pháp Ω (Omega l n)
Kí pháp Θ (theta) ánh giá tr
CÂU 1 (3 i m)
giá chung v
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 :
Tính t)ng S ( x, n) = x +
x2
x3
xn
+
+ ... +
1+ 2 1+ 2 + 3
1 + 2 + 3 + ... + n
ng h p t t nh t, quan tâm t i hàm c n d
i l n nh t.
ng h p trung bình, cùng v i kí pháp O (O l n) cho ánh
ph c t p thu t toán.
Quan h gi a các hàm qua các ký pháp O, Ω, hay Θ
c g i là quan h ti m c n. Sau ây
ta s, xét các tính ch t c a quan h ti m c n.
C!K
8
+, L$,
#
#
'
V i m i hàm f, g không âm, ta có:
CÂU 2 (2 i m)
Dãy An
ng h p x u nh t, quan tâm t i hàm c n trên nh' nh t.
ánh giá tr
Tính ph n x :
c cho nh sau :
f(n) = Θ(f(n))
A1=1
A2n=n + An + 2
f(n) = O(f(n))
A2n+1=n2 + An.An+1 +1
f(n) = Ω(f(n))
-Vi t hàm tính An b"ng
Tính b c c u :
quy
-Viêt hàm tính An b"ng cách không s d ng
quy.
CÂU 3 (2 i m)
Tìm các dãy nh phân chi u dài n, v i n là s nguyên d
ng.
f(n) = Θ(g(n)) & g(n) = Θ(h(n))
f(n) = Θ(h(n))
f(n) = O(g(n)) & g(n) = O(h(n))
f(n) = O(h(n))
f(n) = Ω(g(n)) & g(n) = Ω(h(n))
f(n) = Ω(h(n))
Tính
Ví d n=3 thì có k t qu là:
i x ng :
0 0 0; 0 0 1; 0 1 0; 0 1 1; 1 0 0; 1 0 1; 1 1 0; 1 1 1;
f(n)= .(g(n)) ⇔ g(n)= .(f(n))
CÂU 4 (3 i m)
Cho dãy g$m n kh i l p ph
1
Tính
ng. Trên m i m t c a kh i l p ph
ng ghi m t giá tr nguyên t
f(n)=O(g(n)) ⇔ g(n)= /(f(n))
n 9.
a.Hãy cho bi t có bao nhiêu kh i l p ph
i x ng b c c u:
M N ; <
E 26
(
(E < F
G<
3
ng có giá tr c a các m t là các s khác nhau ?
b.Hãy cho bi t giá tr nào xu t hi n nhi u l n nh t ? Bao nhiêu l n ?
H t
Hàm 1 (h"ng s O(1))
S phép tính/th i gian ch y/dung l
ng b nh không ph thu c vào
Thu t toán v i s h u h n các thao tác
Ch ng h n thu t toán gi i ph
l n
u vào.
c th c hi n 1 ho c 1 vài l n.
ng trình b c nh t, b c hai…
Hàm logn (logarit – O(logn))
Các thu t toán có th i gian th c hi n t ng theo kích th
Ch ng h n thu t toán tìm ki m trên dãy s
ã
c d li u vào v i t c
hàm logarit.
c s(p x p.
Hàm n (tuy n tính – O(n))
Các thu t toán có th i gian th c hi n t ng theo kích th
Th
c d li u vào v i t c
ng là m t s h u h n các thao tác v i t t c các d li u vào.
tuy n tính.
Trang 24
Trang 133
#$ THI C% S& L'P TRÌNH (90 phút-
Ch ng h n thu t toán tìm ki m (ph n t , max, min…) trên m t dãy s .
s 05)
Hàm nlogn (tuy n tính logarit – O(nlogn))
Các thu t toán
gi i các bài toán b"ng cách chia thành các bài toán nh' h n, gi i m t cách
l p r$i h p l i
nh n
c
c k t qu c a bài toán l n.
Cho bi t k t qu c a ch
#include <iostream.h>
Ch ng h n thu t toán s(p x p nhanh m t dãy s .
Hàm n2 ( a th c – O(nm))
Các thu t toán v i các thao tác
t)ng quát nm. Thông th
c th c hi n v i trong các vòng l p l$ng nhau. Tr
ng ánh giá thu t toán
CÂU 1 (1.0 #I(M)
ng h p
n n=3,4
int test(int a, int &b, int &c);
void main()
{
Ch ng h n thu t toán nhân ma tr n.
Hàm 2n (l.y th a – O(mn))
&ây là l p thu t toán có
ph c t p l n. Thông th
li u
l n, có th xem nh bài toán không gi i
u vào l n. Khi n
nh n
ng là các thu t toán
quy v i l
ng d
c theo ngh+a là không
c l i gi i trong m t th i gian h u h n.
ng trình sau:
int a=3,b=2,c=1;
cout<
}
int test(int a, int &b, int &c)
{
a=a+1;b=b+2;c=c+3;
return a+b+c;
}
Ch ng h n thu t toán tháp Hà N i.
Thu t toán v i th i gian th c hi n có c p hàm a th c
N u m t bài toán có
ta có th tìm
ph c t p là a th c (ngh+a là có thu t toán th i gian a th c
c l i gi i úng cho bài toán trong m t kho ng th i gian ch p nh n
bài toán nh v y
ch a tìm
c coi là nh ng thu t toán hi u qu .
c g i là d# gi i. Bên c nh ó còn r t nhi u bài toán mà cho
c thu t toán a th c
thu t toán gi i úng hi n bi t
gi i, mà ng
gi i) thì
c. Nh ng
n nay v*n
i ta th
ng g i là các bài toán khó gi i. Các
i v i các bài toán nh v y
u có th i gian tính hàm m.. & gi i
nh ng bài toán nh v y trong th i gian thích h p, nên phát tri n thu t toán theo h
ng ti p c n
các thu t toán g n úng.
& có thói quen l p trình t t, khi
nv n
i di n v i m t v n
bài toán, sinh viên nên chú ý
tìm thu t toán hi u qu cho bài toán.
B ng sau ây cho ta th y s t ng tr
ng c a các hàm ánh giá
toán.
log n
n
n log n
n2
2n
0
1
0
1
2
1
2
2
4
4
2
4
8
16
16
3
8
24
64
256
4
16
64
256
65536
5
32
160
1024
4294967296
ph c t p c a thu t
CÂU 2 (3 i m)
V i m i n ≥ 1, dãy s Yn
c
nh ngh+a nh sau :
Y1= 1, Y2 = 2, Y3 = 3.
Yn = Yn-1 + 2Yn-2 + 3Yn-3 v i m i n ≥ 4
a.Tính Y7.
b.Hãy vi t hàm tính Yn b"ng ph ng pháp quy.
c.Hãy vi t hàm tính Yn b"ng cách không s d ng
m ng l u tr bi n t m.
quy mà c.ng không s d ng bi n
Câu 3 (4 i m)
Cho m t dãy g$m n ph n t nguyên d ng. Vi t các hàm th c hi n các công vi c sau:
a.Tìm giá tr nh' nh t c a dãy.
b.Hãy m xem trong dãy có bao nhiêu s hoàn ch nh ? (s hoàn ch nh là s b"ng t)ng
các c s th c s c a nó, ch ng h n 6 là s hoàn ch nh vì 6 = 1 + 2 + 3).
c.Tìm s nguyên d ng l n nh t là c s c a t t c các s c a dãy.
d.Tìm chi u dài c a dãy con t ng dài nh t.
CÂU 4 (2 i m)
Hãy tìm các s p,q (0
c s th c s c a p b"ng q và t)ng các
s th c s c a q b"ng p. Tìm m t thu t toán hi u qu khi n l n.
H t
c
Trang 132
Trang 25
F
#$ THI C% S& L'P TRÌNH (90 phút-
s 04)
L$,
Cho hai hàm xác
nh
#
#
'
ph c t p tính toán c a thu t toán là f(n) và g(n). C n xác
nh
quan h ti m c n f(n) = *(g(n)) v i * là O, Ω, Θ.
VI;T CH<=NG TRÌNH HOÀN CH>NH TH?C HI@N CÁC YÊU CAU SAU:
Các ph
Câu 1 (2 i m)
Cho S s,
Dùng
c tính theo công th c S=1+3+5+...+(2n+1) v i n 1 0 và s nguyên M.
Hãy tìm giá tr n nh' nh t sao cho S > M v i M
Ví d : M = 20 thì n tìm
c cho tr
ng pháp ch ng minh quan h :
nh ngh a: Tìm các h"ng s c, n0 th'a mãn i u ki n
Dùng ph
c.
ng pháp quy n p:
Ví d 1.18:
c là 4.
log n= O(n) t c là log(n) ≤ n
Câu 2 (2 i m)
V i m i n ≥ 1, dãy s Yn
c
C s quy n p: n = 1 => 0 < 1 úng
nh ngh+a nh sau:
Y1= 1, Y2 = 2, Y3 = 3. Yn = Yn-1 (5Yn-2 + 6Yn-3) v i m i n ≥ 4
Gi thi t quy n p: log(n) ≤ n v i n>1
a. Vi t hàm tính Yn b"ng ph
T)ng quát: log(n+1) ≤ log (n+n) = log (2n) = log n + 1 ≤ n+1
ng pháp
quy.
b. Vi t hàm tính Yn b"ng cách không dùng
quy và c.ng không dùng bi n m ng
Dùng quan h gi i h n (khi cho n →∞)
l u giá
Câu 3 (3 i m)
Cho dãy n s nguyên d
f ( n ) = O ( g ( n ))
0
tr t m.
lim
n→∞
ng. Hãy vi t các hàm th c hi n các công vi c sau:
a. S(p x p các s nguyên t trong dãy t ng, còn các s khác v*n gi nguyên giá tr và v trí.
b. Xóa t t c các s nguyên t trong dãy.
∞
f (n)
=
const
g (n)
kxd
f ( n ) = Ω ( g ( n ))
f ( n ) = Θ ( g ( n ))
không có quan hê
Ví d 1.19:
Ví d : n=8
và g(x)=n2+n+1
Cho hàm f(x)=
12 2 7 11 3 100 5 3
!
K t qu câu a là : 12 2 3 3 5 100 7 11
"
"
#$
Suy ra: f(x)=O(g(x).
K t qu câu b là : 12 100
Câu 4 (3 i m)
Xác
Thông tin cho n thí sinh trong m t k2 thi tuy n sinh cao h c nh sau:
nh
ph c t p tính toán c a m t thu t toán có th d*n t i nh ng bài toán ph c
t p. Tuy nhiên trong th c t ,
- S báo danh (chu i, t i a 8 ký t )
i v i m t s thu t toán, ta có th phân tích
c
ph c t p c a
m t thu t toán b"ng m t s quy t(c sau ây.
- H và tên (chu i, t i a 32 ký t )
- &i m ngo i ng (s - &i m môn c s (s nguyên)
CK
O$
P
- &i m môn chuyên ngành (s nguyên)
N u thu t toán P có
Hãy th c hi n các công vi c sau ây :
a. Hãy mô t c u trúc cho bài toán.
ph c t p T(n)= O(c .f(n)) thì P có
1
ph c t p O(f(n))
Gi s T(n)=O(3n2) t quy t(c h"ng ta có T(n)=O(n2). T(n) ≤ c . c . f(n) ≤ C .
1
b. Vi t hàm nh p thông tin cho n thí sinh
c. Vi t hàm tìm nh ng thí sinh có i m thi môn ngo i ng 1 5 và có t)ng i m môn c s và
môn chuyên ngành 1 12.
C K ! O$
P
E
Gi s T1(n) và T2(n) l n l
H;T
t là th i gian th c hi n c a hai thu t toán P1 và P2 mà