CHUYÊN Đ S NGUYÊN L N Ề Ố Ớ
1 C ng hai s nguyên l n ộ ố ớ
B ướ c 1: X lí làm sao cho hai s nguyên có chi u dài b ng nhauử ố ề ằ
B ướ c 2: Chuy n t ng kí t trong hai s nguyên l n vào hai m ngể ừ ự ố ớ ả
B ướ c 3: Ti n hành c ng hai m ng ( C ng t ph i sang trái)ế ộ ả ộ ừ ả
For i:=1 to m do Begin
Writeln('Ket qua phep cong la:');
// -Xu li mang ket For i:=2 to m do c[i]:=c[i] mod 10;
For i:=1 to m do Write(c[i]);
B ướ c 2: Chuy n t ng kí t c a hai s b tr và s tr vào 2 m ngể ừ ự ủ ố ị ừ ố ừ ả
B ướ c 3: Ti n hành tr hai m ng ( Tr t ph i sang trái)ế ừ ả ừ ừ ả
Trang 2While (Pos(' ',st1)<>0) do delete(st1,pos(' ',st1),1);
While (Pos(' ',st2)<>0) do delete(st2,pos(' ',st2),1);
While length(st1)>length(st2) do st2:='0'+st2;
While length(st2)>length(st1) do st1:='0'+st1;
// -Tim so bi tru va tim so
If st1>st2 then Begin
sbt:=st1; st:=st2;dau:='';
End Else Begin sbt:=st2; st:=st1;dau:='-';
End;
// -Thuat
m:=length(sbt);
For i:=1 to m do Begin
// -Xu li mang ket
For i:=2 to m do c[i]:=c[i] mod 10;
For i:=1 to m do Write(c[i]);
Readln;
End.
3 S nguyên l n nhân N ố ớ
B ướ 1: Chuy n t ng kí t c a c ể ừ ự ủ s nguyên l n vào m ng Aố ớ ả
For i:=1 to length(st) do val(st[i], c[i], code);
For i:=2 to length(st) do c[i]:= c[i] mod 10
Bài 4 Nhân hai s nguyên l n: ố ớ
Trang 3Write('st2=');Readln(st2);
n:=length(st1);m:=length(st2);
// -Đ a vào m ng A[n], B[m] đ tính - ư ả ể
For i:= 1 to n do val(st1[i],a[i],code);
For i:= 1 to m do val(st2[i],b[i],code);
// -Tinh mang ket
C[n+m]:=0;
For i:= n downto 1 do For j:=m downto 1 do c[i+j]:=c[i+j]+a[i]*b[j];
// -Xu li mang ket
For i:=m+n downto 2 do Begin
Bài 5: Nh p m t s nguyên l n và nh p n (0<n<10) In ra màn hình th ậ ộ ố ớ ậ ươ ng và s ố
d c a phép chia s nguyên l n cho n ư ủ ố ớ
if a[i]<n then x:=a[i]*10+a[i+1];
Trang 4CHUYÊN Đ S LA MÃ Ề Ố Bài 1: Chuy n s La mã sang s h c s 10 ể ố ố ệ ơ ố
For i:=1 to length(so) do
If so[i] in ['a' 'z'] then so[i]:=Upcase(so[i]);
a['I']:=1;A['V']:=5;A['X']:=10;A['L']:=50;A['C']:=100;
A['D']:=500;A['M']:=1000;
m:=a[so[length(so)]];
For i:= length(so) downto 2 do
If a[so[i]]>a[so[i-1]] then m:=m-a[so[i-1]]
CHUYÊN Đ DÃY CON Ề
Bài 1: Dãy con đ n đi u tăng dài nh tơ ệ ấ
Bài 2: Dãy con đan d u dài nh tấ ấ
Bài 3: Dãy con cùng d u dài nh tấ ấ
Bài 4: Dãy con có các ph n t k nhau và gi ng nhau dài nh tầ ử ề ố ấ
Bài 5: Dãy con có t ng b ng Sổ ằ
Bài 6: Dãy con có t ng l n nh tổ ớ ấ
Bài 7: Dãy con k ph n t có t ng l n nh tầ ử ổ ớ ấ
Bài 8: Dãy con dài nh t có t ng chia h t cho Kấ ổ ế
Bài 9:Trò ch i v i băng s ơ ớ ố
Trang 5( L u ý n u có bao nhiêu dãy con th a đi u ki n thì in ra t t c !)ư ế ỏ ề ệ ấ ả
Bài 10: Dãy con chung dài nh t c a hai dãy ấ ủ
THU T TOÁN Ậ
B ướ c 1: Vi t chế ương trình con ki m tra đi u ki n, ho c chể ề ệ ặ ương trình con tính t ngổ
B ướ c 2: Vi t th t c in dãy k t quế ủ ụ ế ả
B ướ c 3: Duy t m ng đ tìm max ( dài nh t hay t ng l n nh t)ệ ả ể ấ ổ ớ ấ
B ướ c 4: Duy t m ng l i m t l n n a đ truy v t và in k t quệ ả ạ ộ ầ ữ ể ế ế ả
Ví d Bài 1: Dãy con đ n đi u tăng dài nh t ụ ơ ệ ấ
For i:= x to y-1 do
If a[i]>=a[i+1] then ddt:=False;
Writeln;
End;
// -than chuong
trinh -begin clrscr;
write('nhap so phan tu=');readln(n);
for i:=1 to n do begin
If ddt(i,j) then
If (j-i+1)>max then max:=j-i+1;
// -Truy vet de in ket
For i:=1 to n-1 do For j:=i+1 to n do
If ddt(i,j) then
If (j-i+1)=max then inkq(i,j);
readln;
end
Bài 2,3,4: Ch thay th ch ỉ ế ươ ng trình con ki m tra đi u ki n ể ề ệ
Bài 5: Dãy con có t ng b ng S ổ ằ
program TongbangS;
uses crt;
type mang=array[1 100] of longint;
var a:mang;
Trang 6For i:= x to y do Tong:=tong+a[i];
Writeln;
End;
// -Than chuong
trinh -begin clrscr;
write('nhap so phan tu=');readln(n);
for i:=1 to n do begin
write('a[',i,']=');readln(a[i]);
end;
// -Thuat
For i:=1 to n-1 do For j:=i+1 to n do
If Tong(i,j)=S then inkq(i,j);
For i:= x to y do Tong:=tong+a[i];
Writeln;
End;
// -Than chuong
trinh -begin clrscr;
write('nhap so phan tu=');readln(n);
for i:=1 to n do begin
Trang 7If Tong(i,j)>max then max:=Tong(I,j);
// -Truy vet de in ket
For i:=1 to n-1 do For j:=i+1 to n do
If Tong(i,j) =max then inkq(i,j);
For i:= x to x+k-1 do Tong:=tong+a[i];
Writeln;
End;
// -Than chuong
trinh -begin clrscr;
write('nhap so phan tu=');readln(n);
for i:=1 to n do begin
If Tong(i)>max then max:=Tong(i);
// -Truy vet de in ket
For i:=1 to n-1 do For j:=i+1 to n do
If Tong(i) =max then inkq(i);
Readln;
End
Bài 8: Dãy con dài nh t có t ng chia h t cho K ấ ổ ế
Trang 8For i:=x to y do t:=t+a[i];
If t mod k=0 then kt:=True Else kt:=False;
If (j-i+1)>max then max:=j-i+1;
// -Truy vet de in ket
Trang 9For i:=n downto 1 do
If kt(i,tong div i) then
d) Hãy xóa đi v trí th k trong m ng ( S d ng th t c xóa)ị ứ ả ử ụ ủ ụ
e) Hãy chèn X vào v trí th k trong dãy (dùng th t c chèn)ị ứ ủ ụ
f) Tìm ki m và thay th : Hãy tìm t t c các c p s c nh nhau có t ng chia h t choế ế ấ ả ặ ố ạ ổ ế
10 và thay th các s này b ng t ng c a chúngế ố ằ ổ ủ
g) Nh p dãy tăng, sai thì nh p l i, nh p -1 thì d ng và tính t ng (b -1)ậ ậ ạ ậ ừ ổ ỏ
h) Nh p dãy n pt, In ra màn hình các s âm tăng d n, các s dậ ố ầ ố ương gi m d nả ầ
s ; ố
Trang 10For i:=1 to length(st) do
If st[i] in['a' 'z'] then st[i]:=Upcase(st[i]);
For ch:='A' to 'Z' do A[ch]:=0;
For i:= 1 to length(st) do
If st[i] in['A' 'Z'] then A[st[i]]:=A[st[i]]+1;
For i:= 1 to length(st) do
If st[i] in['0' '9'] then A[st[i]]:=A[st[i]]+1;
For ch:='0' to '9' do
If A[ch]<>0 then Writeln(ch,' ->',A[ch]);
Readln;
End.
2. Nh p chu i g m nhi u t ậ ỗ ồ ề ừ: chu n hóa chu i; đ m s tẩ ổ ế ố ừ, in t dài nh t; in t đ iừ ấ ừ ố
x ng trong chu i; in câu đ o có nghĩa;ứ ỗ ả
3. Chu i con: ỗ
a) Chu i con đ i x ng dài nh t; ỗ ố ứ ấ
b) Chu i con g m các ph n t k nhau và gi ng nhau dài nh t;ỗ ồ ầ ử ề ố ấ
c) Ki m tra chu i có k ph n t k nhau và gi ng nhay không, n u có xóa các pt ể ỗ ầ ử ề ố ế
k và gi ng nhau ch gi l i 1 kí tề ố ỉ ữ ạ ự
d) Chu i con chung dài nh t c a hai chu i; ỗ ấ ủ ỗ
e) Ki m tra hai chu i có ph i là hai chu i b n bè hay không ể ỗ ả ỗ ạ
f) Nén và gi i nén chu i ả ỗ
H ƯỚ NG D N GI I Ẫ Ả (T ươ ng t nh dãy con trong m ng 1 chi u) ự ư ả ề a) Chu i con đ i x ng dài nh t: ỗ ố ứ ấ
- Bước 1: Chương trình con ki m tra tính đ i x ng t v trí x đ n y ể ố ứ ừ ị ế
- Bước 2: Th t c in t v trí x đ n v trí y chu i stủ ụ ừ ị ế ị ỗ
- Bước 3: Duy t chu i tìm max ( dài nh t)ệ ỗ ấ
- Bước 4: Duy t chu i truy v t đ in k t quệ ỗ ế ể ế ả
Trang 11For i:=1 to length(st)-1 do
For j:=i+1 to length(st) do
If dx(i,j) then
If(j-i+1)>max then max:=j-i+1;
// -Truy vet va in ket
For i:=1 to length(st)-1 do
For j:=i+1 to length(st) do
For i:=1 to length(st)-1 do
For j:=i+1 to length(st) do
If kt(i,j) then
If(j-i+1)>max then max:=j-i+1;
Trang 12// -Truy vet va in ket
For i:=1 to length(st)-1 do
For j:=i+1 to length(st) do
For i:=1 to length(st)-1 do
For j:=i+1 to length(st) do
Trang 13If dem(i,j)>max then max:=dem(i,j);
// -Truy vet in ket
For i:=1 to length(st1) do
Trang 14a/ Nh p chu i S1 t bàn phím, nén chu i s1 thành chu i S2 và xu t S2 ra màn hinhậ ỗ ừ ỗ ỗ ấVD: S1: AABCAAAAACCCCBBB ->S2: AABC5A4C3B
b/ T bàn phím nh p chu i S2 dừ ậ ỗ ướ ại d ng đã nén, gi i nén l i chu i S1 ban đ u, xu t k tả ạ ỗ ầ ấ ế
For i:= x to length(st1)-1 do
If st1[i]=st1[i+1] then d:=d+1 Else Break;
While i<=length(st) do Begin
If dem(i)=1 then Write(st[i]) Else
If dem(i)=2 then Write(st[i],st[i]) Else
If dem(i)>2 then Write(dem(i),st[i+1]);
If Not(st[i] in['0' '9']) then Write(st[i]);
If (st[i] in['3' '9'])and (Not(st[i+1] in['0' '9'])) then Begin
Writeln('Chuoi sau khi nen la: ');nen(st1);
Write('Nhap chuoi can giai nen:');Readln(st2);
Writeln('Chuoi sau khi giai nen la: ');giainen(st2);
Trang 1566
67 68
69
70 71
72 73
74
J I
K L
M N
For i:=1 to length(st) do
If st[i]<>' ' then st[i]:=char(((ord(st[i])-65+k)mod 26)+65);
Write('Chuoi sau khi ma hoa la: ',st);
End;
Procedure giaima(st:string);
Var i:longint;
Begin
For i:=1 to length(st) do st[i]:=char((((ord(st[i])-65-k)+26)mod 26)+65);
Write('Chuoi sau khi giai ma la: ',st);
End;
Begin
Write('Nhap chuoi:');readln(st);
Trang 16t Nh p n,m ki m tra n,m có ph i là c p s nguyên t t ố ậ ể ả ặ ố ố ươ ng đ ườ ng hay không ?
Trang 17End Else i:=i+1;
If ( so1 mod d[i]<>0) then ok2:=False;
If ok1 and ok2 then ok:=True Else ok:=False;
If ok then Writeln('NTTD') Else Writeln('Khong !');
Trang 18Ví d : 6 là ph n nguyên t vì 6 có 4 ụ ả ố ước, các s t 1 đ n 5 không có s nào nhi u h n 4 ố ừ ế ố ề ơc
Trang 20If a mod b=0 then Writeln('PS khi rut gon la: ',dau,a div b) Else
Writeln('PS khi rut gon la:',dau,a div ucln(a,b),'/',b div ucln(a,b));
Readln;
End.
Bài 12: N u N<5 thì s ch s 0 t n cùng b ng 0, ngế ố ữ ố ậ ằ ượ ạc l i thì s ch s không t n cùngố ữ ố ậ
b ng: (n div 5)+ S ch s 0 tân cùng c a (n div 5)ằ ố ữ ố ủ
Bài 13: S thú v là s nguyên t và đ o ngố ị ố ố ả ượ ủc c a nó cũng là s nguyên tố ố
Bài 14: S song đ i x ng là s đ i x ng và bi u di n nh phân c a nó cũng là s đ i ố ố ứ ố ố ứ ể ễ ị ủ ố ố
For i:=1 to length(st) div 2 do
If st[i]<>st[length(st)-i+1] then dx:=False;
Trang 21If n<2 then kt:=false Else
For i:=2 to trunc(sqrt(n)) do
If n mod i=0 then
Trang 22For i:=2 to trunc(sqrt(n)) do
If (n mod i=0) then
Write('nhap so chu so sieu nguyen to: ');readln(n);
For i:=1 to 4 do try(a[i]);Writeln;
Write('Co ',d,' so sieu nguyen to');
Readln;
End.
CHUYÊN Đ PHÂN TÍCH S Ề Ố 1) Phân tích m t s thành t ng ộ ố ổ
a) Phân tích m t s thành t ng c a hai s nguyên tộ ố ổ ủ ố ố
b) Phân tích m t s thành t ng c a ba s nguyên tộ ố ổ ủ ố ố
c) Phân tích m t s thành t ng c a các s t nhiên liên ti pộ ố ổ ủ ố ự ế
d) Phân tích m t s thành t ng c a các s FBNX đôi m t khác nhauộ ố ổ ủ ố ộ
2) Phân tích m t s thành tích ộ ố
a) Phân tích m t s thành tích các th a s nguyên t d ng nhânộ ố ừ ố ố ạ
b) Phân tích m t s thành tích các th a s nguyên t d ng lũy th aộ ố ừ ố ố ạ ừ
c) Tìm s nh h n N sao cho khi phân tích ra th a s nguyên t có nhi u nhân t ố ỏ ơ ừ ố ố ề ử
If n<2 then kt:=False Else
For i:=2 to trunc(sqrt(n)) do
If n mod i=0 then
Trang 23If n<6 then Writeln('Khong the phan tich') Else
For i:=1 to n div 3 do
If kt(i) then
For j:=i to (n-i) div 2 do
If kt(j) and kt(n-i-j) then Writeln(n,'=',i,'+',j,'+',n-i-j);
For i:=x to y do t:=t+i;
For i:= x to y-1 do Write(i,'+');
Writeln(y);
End;
Begin Write('n=');Readln(n);
ok:=True;
For i:=1 to n-1 do For j:=i+1 to n do
If tong(i,j)=n then Begin
For i:=3 to 60 do a[i]:=a[i-1]+a[i-2];
For i:= 60 downto 1 do
Trang 24For i:=1 to m do b[i]:=True;
For i:=1 to m-1 do If (a[i]=a[i+1] ) then b[i+1]:=False;
// -Duy t m ng và in k t qu - ệ ả ế ả
For i:=1 to m do
Trang 25If b[i] then Write(a[i],'^',dem(a[i]),'.');
Readln;
end
c) Tìm s nh h n N mà sau khi phân tích ra th a s nguyên t có nhi u nhân t ố ỏ ơ ừ ố ố ề ử
nh t ấ ( Ho c tìm s nh h n N mà có nhi u ặ ố ỏ ơ ề ước nguyên t nh t)ố ấ
B ướ c 1: CTC đ m s ế ố ước nguyên t c a m t s Nố ủ ộ ố
B ướ c 2: Th t c phân tích m t s N ra th a s nguyên tủ ụ ộ ố ừ ố ố
B ướ c 3: Tìm max ( s ố ước nguyên t nhi u nh t trong các s t 1 đ n n)ố ề ấ ố ừ ế
B ướ c 4: Truy v t và in k t qu ( phân tích)ế ế ả
For i:= 1 to n-1 do If dem(i)>max then max:=dem(i);
For i:=1 to n do If dem(i)=max then phantich(i);
Readln;
end.
Nh n xét: ậ Các s nh h n N có nhi u ố ỏ ơ ề ước nh t đ u có d ng 2ấ ề ạ x ho c 2ặ x-1.3
Nh v y bài toán thành: Tìm x l n nh t sao cho 2ư ậ ớ ấ x <N ho c 2ặ x-1.3<N
Bài toán tr nên r t đ n gi n !ở ấ ơ ả
Trang 27For i:=1 to n do b[i]:=True;
Write('Hoan vi thu ',k,' la: ');
Try(1);
Readln;
End.
Bài 3: K là m t trong các hoán v c a N H i K là hoán v th m yộ ị ủ ỏ ị ứ ấ
{K la mot trong so hoan vi cua n, nhap k, hoi k la hoan vi thu may}
Trang 28Write('nhap hoan vi k=');Readln(k);
For i:=1 to n do b[i]:=True;
Bài 5 ng d ng c a dãy nh phân có đ dài n Ứ ụ ủ ị ộ
Bài 5.1 Cho t p h p A={1, 2, 3, ….n} (n<9) Hãy li t kê t t c các t p h p con c a ậ ợ ệ ấ ả ậ ợ ủA
Trang 29Hãy vi t chế ương trình đ i t gi y b c có m nh giá n (Vi t Nam đ ng) ra ba lo i gi yổ ờ ấ ạ ệ ệ ồ ạ ấ
b c có m nh giá 500, 200, 100 (Vi t Nam đ ng) sao cho s t g y b c ph i s d ng là ít ạ ệ ệ ồ ố ờ ấ ạ ả ử ụ
nh t (n đấ ược nh p t bàn phím).ậ ừ
2 Bài toán đóng gói g o ạ
Trang 30M t nhà máy xây xát c n đóng gói gao vào các lo i bao 100 kg, 50 kg, 20 kg, 10 kg, ộ ầ ạ
5 kg V i m i 1o i bao ch đớ ỗ ạ ỉ ược đóng gói khi đ s lủ ố ượng quy đ nh cho 1o i bao đó Tuy ị ạnhiên công ty s n xu t các lo i bao thì cung c p s lả ấ ạ ấ ố ượng bao theo t ng đ t v i s lừ ợ ớ ố ượng
t ng lo i khác nhau.ừ ạ
Yêu c u: V i kh i lầ ớ ố ượng g o va s lạ ố ượng bao c a t ng lo i cho trủ ừ ạ ước, hãy tìm m t ộ
phương án đóng gói sao cho s lố ượng g o th a không đạ ừ ược đóng gói (n u có) là ít nh t.ế ấ
3 Bài toán tr ti n đi n ả ề ệ
Vi t chế ương trình pascal tính ti n đi n c a h gia đình A v i s kW đi n tiêu th là ề ệ ủ ộ ớ ố ệ ụN.?
Bi t r ng giá đi n đế ằ ệ ược tính nh sau:ư
1-50 kW: 1670đ/kW
51-100 kW : 1780đ/kW
101 tr đi: 2600đ/kWở
4 Bài toán tr ti n taxi ả ề
Vi t chế ương trình tính ti n cề ước TAXI Bi t r ng:ế ằ
Hãy xác đ nh s phòng 2 chị ố ổ a2 và s phòng 3 chố ổ a3 c n thuê.ầ
6 Nh p vào m t s nh h n 1000 Hãy đ c s đó ra màn hình ậ ộ ố ỏ ơ ọ ố
7 Hãy nh p vào m t năm d ậ ộ ươ ng l ch, hãy đ i sang năm âm l ch ị ổ ị
8 Bài toán ng ườ i khách mua hàng
Khách th 1 m t t1 phút đ ph c vuứ ấ ể ụ
Khách th 2 m t t2 phút đ ph c vứ ấ ể ụ ụ
………
Khách th N m t tứ ấ n phút đ ph c vể ụ ụ
a) H i ngỏ ười khách nào có th i gian ph c v nhanh nh t, là bao lâu ?ờ ụ ụ ấ
b) V y ngậ ười khách th K ph i đ i bao lâu m i đứ ả ợ ớ ược ph c v mua hàng ?ụ ụ
9 Bài toán chú công an trong Pascal
Không quá 100 công an tham gia chi n d ch truy quét t i ph m, chia thành không ế ị ộ ạquá 26 đ i, M i đ i kí hi u là ch cái in thộ ỗ ộ ệ ữ ường az, các đ i khác nhau có đánh ộ
d u khác nhau, chi n sĩ công an đ i nào thì đánh kí hi u đ i đó Các kí hi u này ấ ế ộ ệ ộ ệghép thành chu i st, nh p chu i st, Tính s đ i và s lỗ ậ ỗ ố ộ ố ượng chi n sĩ trong m i ế ỗ
đ i ( Chu i, tu n su t)ộ ỗ ầ ấ
10 Mario hái n m ấ
Trong m t dãy các cây n m ( có n cây n m) có kh i lộ ấ ấ ố ượng khác nhau
Mario ph i ch n liên t c k cây n m đ t ng kh i lả ọ ụ ấ ể ổ ố ượng g n 100 nh tầ ấ
Trang 31If abs(tong(i,j)-100)<min then min:=abs(tong(i,j)-100);
// Truy vet va in day ket
Var tram:Array[0 9] of String =(' ','mot tram','hai tram','ba tram','bon tram','nam
tram','sau tram','bay tram','tam tram','chin tram');
chuc:Array[0 9] of String=('le ','muoi','hai muoi','ba muoi','bon muoi','nam muoi','sau
muoi','bay muoi','tam muoi','chin muoi');
donvi:Array[0 9] of String =(' ','mo`t','hai','ba','bon','lam','sau','bay','tam','chin');