Tải bản đầy đủ (.pdf) (78 trang)

Bai giang mon Cơ sở lập trình

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.31 MB, 78 trang )

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à


×