Upload
nhi-tran
View
216
Download
0
Embed Size (px)
Citation preview
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
1/60
Sng to trong Thut ton v Lptrnh Tp I 223
CHNG 8
SUY NGM
Chng ny gii thiu mt s bi ton thuc cc lp thut gii khc nhau bnc t luyn tp.
Thng thng, nu ch bit mt phng php gii m gp bi ton "trng t", ngha lbi ton vn dng chnh phng php bit th ta gn nh khng phi suy ngh g. Tuynhin, khi c trong tay mt s phng php th vic chn thut gii cho mi bi ton cth s khng d dng cht no.
Luyn tp v suy ngm tm kim ng i trong cc tnh hung nh trn scung cp cho chng ta nhiu kinh nghim qu.
Bi 8.1. Lt nnNgi ta cn lt kn mt nn nh hnh vung cnh di n = 2k, (k l mt s t nhintrong khong 1..6) khuyt mt phn t ti gc trn phi bng nhng vin gch mu
hnh thc th (ch L) to bi 3 vung n v nh trong hnh 2b. Hai vin gch kcnh nhau d ch 1 n v di phi c mu khc nhau. Hy cho bit mt cch lt vis mu t nht.
Hnh 2
D liu vo: tp vn bn NEN.INPcha s t nhin n.
D liu ra: tp vn bn NEN.OUT. Dng u tin l hai s t nhin m biu ths vin gch v cl s mu cn dng cho vic lt nn. Tip n l mt phngn lt nn tm c, trong mi vin gch lt c to bi ba ch s gingnhau th hin mu ca vin gch . Cc s trn mi dng cch nhau qua du
cch.
D B
A C
a) Nn nh b) Gch lt
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
2/60
Sng to trong Thut ton v Lptrnh Tp I 224
Th d, vi n= 8 ta c mt cch lt nn nhsau:
Li gii sau y ca bn L Hong Hi, lp10 chuyn Tin, i hc Khoa hc T nhin, i
hc Quc gia H Ni (nm 2002). tnh s vin gch ta ly ba phn t din
tch hnh vung phnn nh chia cho 3 l dintch 1 vin gch thc th:
sogach:=((3*n*n) div 4) div 3;
V s mu, vi n= 2 th ch cn 1 vin gch mu 1.Vi mi n > 2 ta s trnh by mt thut ton cn ti a bamu.
u tin ta gi th tc Init khi tr vihnh vung cnh v= 2 nm gc di tri cann nh c biu din di dng mt mng haichiu a: ba trong hnh vung 2 2 s cin gi tr 1, nm gc trn phi c ingi tr 2 (phn t m, hnh 6). Gi hnh ckhi tr l A. Mi bc tip theo ta thc hin bathao tc bin hnh sau y:
- Tnh tin A i ln theo ng cho thu c hnh B (xem th tcDichCheo).
- Lt A sang phi (tc l ly i xng gng qua trc tung) thuc hnh C (xem th tc LatPhai).
- Lt A ln trn (tc l ly i xng gng qua trc honh) thuc hnh D (xem th tc LatLen).
Ch rng khi lt ta cn thc hin thm php hon i tr 1 v 3 cho nhau.
Mi ln lp nh vy ta s thu c hnh vung c cnh tng gp i hnh trc.
Khi v = nta gi th tc Fini ghi ba mnh D, A v C vo tp kt qu.
3 3 1 1
3 2 2 1
1 2 3 3
1 1 3 2
3 3 1 2 1 1 1 1 3 3 1 2 2 3 1 1
3 2 1 1 3 2 1 1 3 3 2 1
1 2 1 1 1 1 1 1 1 2 2 3 1 2 2 3 1 2 2 3
1 1 1 1 3 3 1 1 3 3 1 1 3 3
NEN.INP NEN.OUT
8 16 3
3 3 1 13 2 2 1
1 2 3 3
1 1 3 2
3 3 1 2 2 3 1 1
3 2 1 1 3 3 2 1
1 2 2 3 1 2 2 3
1 1 3 3 1 1 3 3
3 3 1 1
3 2 2 1
1 2 3 3
1 1 3 2
3 3 1 2 2 3 1 1
3 2 1 1 3 3 2 1
1 2 2 3 1 2 2 3
1 1 3 3 1 1 3 3
Hnh 3.Nn nh vi n = 8
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
3/60
Sng to trong Thut ton v Lptrnh Tp I 225
Hnh 6
Ta biu din nn nh hnh vung qua mt mng hai chiu a vi cc dng c m s 1..nt trn xung v cc ct c m s t 1..nt tri qua phi. Khi vin gch gc di tri s
c to [n, 1]. Sau khi c d liu nhn gi tr n, ta gn tr ban u cho 4 vin gch gcdi tri nh sau:
a[n-1,1] := 1; a[n-1,2] := 2;
a[n,1] := 1; a[n,2] := 1;
K hiu A l hnh vung cnh di v n v nm ti gc di tri ca nn nh, tc lphn mng v[nv + 1..n, 1..v] trong hnh 7. Khi cc th tc di chuyn hnh vung As cm t nh sau.
A
n v + 1 3 3 1 2
... 3 2 1 1
n 1 1 2 2 3
n 1 1 3 3
1 2 ... v
Hnh 7.Hnh vung a cnh v c chn bin hnh
B 3 3 1 2
3 2 1 1
1 2 2 3
A 1 1 3 3
n v +1 3 3 1 2
... 3 2 1 1
n 1 1 2 2 3
n 1 1 3 3
1 2 ... v
Hnh 8.Dch cho A thu c B
dch cho hnh vung A ta copy dn tng phn t trong cc dng, t dng nv
+ 1 n dng cui cng, dng th nn v tr mi (h. 8).
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
4/60
Sng to trong Thut ton v Lptrnh Tp I 226
(*---------------------------------------------Dich hinh vuong A canh v,a[n-v+1..n,1..v]o goc duoi trai di len theoduong cheo chinh cua nen nha de nhan duoc manh B.
--------------------------------------------*)procedure DichCheo(v: word);var i,j:word;
beginfor i := n-v+1 to n do
for j := 1 to v doa[i-v,j+v] := a[i,j];
end;
A C
n v +1
3 3 1 2 2 3 1 1
... 3 2 1 1 3 3 2 1
n 1 1 2 2 3 1 2 2 3
n 1 1 3 3 1 1 3 3
1 2 ... v
Hnh 9.Lt A qua phi thu c C
lt phi hnh vung A ta cng chuyn dn tng phn t trong cc dng, t dngnv+ 1 n dng cui cng, dng th nn v tr mi. Tuy nhin cn lu thay i trmu t 1 sang mu 3 v ngc li. Thao tc ny c thc hin qua php gn 4 c,trong c l mu ca gc. Nu c = 2 th 42 = 2, tc l mu 2 khng thay i (h. 9).
3 3 1 1 D
3 2 2 1
1 2 3 3
1 1 3 2
n v + 1 3 3 1 2 A... 3 2 1 1
n 1 1 2 2 3
n 1 1 3 3
1 2 ... v
Hnh 10. Lt A ln trn thu c D
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
5/60
Sng to trong Thut ton v Lptrnh Tp I 227
(*--------------------------------------------Lat hinh vuong canh v, a[n-v+1..n,1..v]o goc duoi trai sang phai, doi mau gach
de nhan duoc manh C.----------------------------------------------*)
procedure LatPhai(v: word);var i,j,v2:word;
beginv2 := 2*v;for i := n-v+1 to n do
for j := 1 to v doa[i,v2-j+1] := 4-a[i,j];
end;
lt hnh vung A ln trn ta cng lm tng t nh lt phi (h. 10).
(*------------------------------------------Lat hinh vuong canh v, a[n-v+1..n,1..v]o goc duoi len tren, doi mau gachde nhan duoc manh D.
--------------------------------------------*)procedure LatLen(v: word);var i,j,v2:word;
beginv2 := n-2*v+1;for i := 0 to v-1 dofor j := 1 to v do
a[v2+i,j] := 4-a[n-i,j];end;
Bnh lun
Thut gii s dng hai php bin hnh c bn trong chng trnh ph thng l phpdi hnh (tnh tin) v i xng qua trc. Vic hon i tr 1 v 3 cho nhau l mt tng thng minh. Mi trong bng c in ng mt ln do phc tp tnhton ca thut ton l n2, trong khi cc bi gii khc u phi s dng cc php d tm xc nh mu t v gi quy nn thng tn km v min nh v thi gian hnnhiu ln.
(* Pascal *)
(****************************LATNEN lat nen nhahinh vuong khuyet goc bangcac vien gach mau hinh L*****************************)const
fn = 'NEN.INP'; {input file}gn = 'NEN.OUT'; {output file}
bl = #32; {dau cach}mn = 65; {kich thuoc toi da cua n}
var {n chieu dai canh nen nha}f,g: text;a: array[0..mn,0..mn] of byte; {nen nha}
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
6/60
Sng to trong Thut ton v Lptrnh Tp I 228
{a[i] mau vien gach lat}n,n2: word; {n2 = n/2}sogach: word;
{-----------------------------
Doc du lieu va khoi tri----------------------------}
procedure Init;begin
{Doc du lieu}assign(f,fn); reset(f);readln(f,n); close(f);n2 := n div 2;sogach := ((3*n*n) div 4) div 3;{Dat tam 4 o vuong (2 X 2) tai goc duoi trai}a[n-1,1] := 1; a[n-1,2] := 2;a[n,1] := 1; a[n,2] := 1;
end;{-------------------------------
Ket thuc, ghi tep-------------------------------}
procedure Fini(somau:word);var i,j: word;
beginassign(g,gn); rewrite(g);
writeln(g,sogach,bl,somau);{ghi goc tren trai D}for i := 1 to n2 do
beginfor j := 1 to n2 do
write(g,a[i,j],bl);writeln(g);
end;{ghi nua duoi A va C}for i := n2+1 to n dobegin
for j := 1 to n dowrite(g,a[i,j],bl);
writeln(g);end;close(g);
end;(*---------------------------------------------Dich hinh vuong A canh v, a[n-v+1..n,1..v]o goc duoi trai di len theo duong cheochinh cua nen nha de nhan duoc manh B.-----------------------------------------------*)procedure DichCheo(v: word); t vit(*--------------------------------------------Lat hinh vuong canh v, a[n-v+1..n,1..v]o goc duoi trai sang phai, doi mau gach
de nhan duoc manh C.-----------------------------------------------*)procedure LatPhai(v: word); t vit
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
7/60
Sng to trong Thut ton v Lptrnh Tp I 229
(*--------------------------------------------Lat hinh vuong canh v, a[n-v+1..n,1..v]o goc duoi len tren, doi mau gachde nhan duoc manh D.
-----------------------------------------------*)procedure LatLen(v: word); t vitprocedure Run;var v:word;begin
Init; {khoi tri voi n = 2}if n = 2 thenbegin
Fini(1); exit;end;
v := 1;repeatv := v*2;if v < n2 then DichCheo(v);LatPhai(v);LatLen(v);
until v = n2;Fini(3);
end;BEGIN
Run;END.
// C#using System;using System.IO;namespace SangTao1{
/*-----------------* Lat nen* ----------------*/
class LatNen{
const string fn = "Nen.inp";const string gn = "Nen.out";
static int n = 0; // canh nen nhastatic int[,] c; // nen nhastatic void Main(){
Run();Console.ReadLine();
} // Mainstatic void Run(){
Doc(); Lat(); Ghi();Test();
Console.WriteLine("\n Fini");Console.ReadLine();}
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
8/60
Sng to trong Thut ton v Lptrnh Tp I 230
// Kiem tra ket quastatic void Test() t vitstatic void Ghi(){
StreamWriter g = File.CreateText(gn);int n2 = n / 2;const string BL = " ";if (n == 2)
g.WriteLine(1 + BL + 1);else g.WriteLine(((n*n)/4)+BL+3);for (int i = 0; i < n2; ++i){
for (int j = 0; j < n2; ++j)g.Write(c[i, j] + BL);
g.WriteLine();}for (int i = n2; i < n; ++i){
for (int j = 0; j < n; ++j)g.Write(c[i, j] + BL);
g.WriteLine();}g.Close();
}static void Lat(){
c = new int[n, n];
// Khoi trifor (int i = n - 2; i < n; ++i)
for (int j = 0; j < 2; ++j)c[i, j] = 1;
c[n - 2, 1] = 2;int k = 2;
while (k < n){
Len(k);Phai(k);DichCheo(k);k *= 2;
}}// Lat ma tran kXk len trenstatic void Len(int k){
for (int i = n - k; i < n; ++i)for (int j = 0; j < k; ++j)
c[2*(n-k)-i-1,j] = 4-c[i,j];}// Lat ma tran kXk sang phaistatic void Phai(int k)
{for (int i = n - k; i < n; ++i)
for (int j = 0; j < k; ++j)
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
9/60
Sng to trong Thut ton v Lptrnh Tp I 231
c[i,2*k-j-1] = 4-c[i,j];}// dich ma tran kXk theo huong Dong-Bacstatic void DichCheo(int k)
{for (int i = n - k; i < n; ++i)
for (int j = 0; j < k; ++j)c[i - k, j + k] = c[i, j];
}static void Doc(){
n = int.Parse(File.ReadAllText(fn).Trim());Console.WriteLine("\n Da doc n = " + n);
}} // LatLen
} // SangTao1
Bi 8.2. Ch s cui khc 0 thi Tin hc Quc gia Ireland, 1994.
Tm ch s cui cng khc 0 ca n! vi n trong khong 1..100.Th d:- n= 7, kt qu = 4.- n= 15, kt qu = 8.
Bi gii
Thut gii ca bn Vit Hng (H Ty, 2002) cho php m rng gii hn ca n n hngchc vn v nu bn mun, c th tip tc m rng n hng triu.
tng chnh ca Vit Hng nm cng thc: 2 5 = 10 (hai ln nm l mi).Tht vy, ta bit:
n! = 1.2.3...n
Cc ch s cui cng bng 0 ca n giai tha c sinh ra khi v ch khi trong khaitrin ra tha s nguyn t ca tch trn c cha cc cp tha s 2 v 5. Vy th trc htta m s lng cc tha s 2, k hiu l d2 v s lng cc tha s 5, k hiu l d5.
Th d, vi n= 15 ta c dng khai trin ra tha s nguyn t ca ngiai tha nhsau:
n! = 1.2.3.(2.2).5.(2.3).7.(2.2.2).9.(2.5).11. (2.2.3).13.(2.7).(3.5)Do d2 = 11 v d5 = 3. Vy ta c ba cp 2.5 = 10 v s m di ra ca tha s 2
so vi tha s 5 s l d2d5 = 113 = 8. Khi , kt qu s l:ch s cui cng khc 0 ca 15! = ch s cui cng ca
k.2d2-d5
Trong kl tch ca cc tha s cn li.
D thy vi mi n, ta lun c d2 d5 v c hai s lin tip th c mt s chn (chiaht cho 2), cn nm s lin tip mi c mt s chia ht cho 5.
Vic cn li l ly tch kca cc s cn li. V tch ny khng bao gi tn cngbng 0 cho nn ta ch cn gi li mt ch s cui cng bng cch ly mod10.
tnh ch s tn cng ca 2m
vi m = d2d5 > 0 ta n tnh tun hon can, c th l ta ch cn tnh ch s tn cng ca 2(m mod 4)vi cc trnghp:m mod 4 = 0, 1, 2 v 3.
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
10/60
Sng to trong Thut ton v Lptrnh Tp I 232
Theo th d trn ta c m mod 4 = 8 mod 4 = 0, do ch s cui ca 2ml 6 ch khngphi l 1 v m> 0. Ta tnh c (nhng cp 2 v 5 c gch di)
15! = 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15 =
= 1.2.3.(2.2).5.(2.3).7.(2.2.2).9.(2.5).11. (2.2.3).13.(2.7).(3.5)
(3.3.7.9.11.3.13.7.3). 28mod 10 =
= ((kmod 10) . (28
mod 10)) mod 10 = (3.6) mod 10 = 8.
Ch s cui cng khc 0 ca 15! l 8.Lu rng (a.b) mod m=((a mod m).(b mod m)) mod m cho nn ta c th ly mod
cc bc trung gian vi s ln ty .
trnh vic trn s khi s dng cc bin dung lng nh nh kiu word thay vdng longintchng ta c th tng thm mt php ton mod na. Chng hn, khi tchlu kt qu, thay v vit
k := (k*c) mod 10;
ta nn vitk := (k*(c mod 10)) mod 10;
trong kl s c mt ch s, cl s c th rt ln, lm tch (k*c) vt qu giihn cho php. Th d, nu khai bo kiu d liu l word th khi k= 8, c=17999 ta ck*c= 8*17999 = 143992 > 65535 (gii hn ca word), trong khi 8 v 17999 u nmtrong gii hn cho php.
Bnh lun rng:
14! = 87178291200, c ch s cui cng khc 0 l 2 15! = 1307674368000, c ch s cui cng khc 0 l 8.
Nu tnh 15! m bn ch ly mt ch s cui khc 0 ca cc php tnh trung gianth sau khi tnh ch s cui ca 14! bn s nhn c 2 v cui cng l:(2*15) mod 10 = 30 mod 10 = 3.
Kt qu ny l sai v ch s cui khc 0 ca 15! l 8.
Chng trnh sau y cha th tc findtm ch s cui cng khc 0 ca n! vi ntrong khong 1..65535.
Ta thc hin mt ci tin nh nh sau. Thay v m s lng cc tha s 2 (d2) vtha s 5 (d5) sau lm php tr d2d5, ta m lun mt ln hiu s ny v ghi vo
bin m. C th l vi mi gi tr i = 2..nta m s lng cc tha s 2 trc, sau tri s lng cc tha s 5.
(* Pascal *)(*---------------------------------------Tim chu so khac khong cuoi cung cua n!
----------------------------------------*)uses crt;function find(n: longint): longint;var m: longint;
{m hieu so cac thua so 2 v thua so 5}i,k,c: longint;
begin {k ket qua trung gian}k := 1; m := 0;
find := k;if (n
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
11/60
Sng to trong Thut ton v Lptrnh Tp I 233
d := 0;for i := 2 to n dobegin
c := i;
while c mod 2 = 0 dobegin
m := m+1; c := c div 2;end;
while c mod 5 = 0 dobegin
m := m-1; c := c div 5;end;k := (k*(c mod 10)) mod 10;
end;case (m mod 4) of
0: c := 6;1: c := 2;2: c := 4;3: c := 8;
end;find := (k*c) mod 10;
end;procedure run;
var n: longint;begin
writeln('--------------------');repeat
write(' Nap N (Muon dung chuong trinh, bam 0 ):');read(n);if n = 0 then halt;
writeln(' find(',n,') = ',find(n));until false;
end;BEGIN
run;END.
K thut gn trc
Bn c th thay lnh Casetrong vic tnh ch s tn cng ca 2mbng cc thao tcsau:
1. Khai bo v gn trc tr cho mng LuyThuaconst LuyThua: array[0..3] of word = (6,2,4,8);
ngha ca dng lnh trn: khai bo mt mng kiu word vi bn phn t c chs bin thin t 0..3 v gn trc tr cho mng ny l:
LuyThua[0] := = 6; {= 24 mod 10}
LuyThua[1] = 2; {= 21 mod 10}
LuyThua[2] = 4; {= 22 mod 10}
LuyThua[3] = 8; {= 23 mod 10}
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
12/60
Sng to trong Thut ton v Lptrnh Tp I 234
Ch rng, do i hi phi khai bo trc v gn ng thi nn Turbo Pascal 7.0quy nh t khai bo ny sau t kho const. Tuy nhin LuyThuavn l bin mngch khng th l hng.
2. Khi cn tm ch s cui cng c ca 2mbn khi phi dng lnh case, chcn vit:
c := LuyThua[m mod 4];Hm Findtheo phng n mi s nh sau: const LuyThua: array[0..3] of word = (6,2,4,8);{-------------------------------------------}FindTm ch s cui cng khc 0 ca n!Phuong an dung mang LuyThua gan truoc--------------------------------------------}function find(n: longint): longint;var m: longint;{m hieu so cac thua so 2 v thua so 5}
i,k,c: longint; {k ket qua trung gian}begin
k := 1; m := 0;find := k;if (n
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
13/60
Sng to trong Thut ton v Lptrnh Tp I 235
{for (int i = 1; i < n; ++i){Console.Write("\n Chu so cuoi khac 0 cua " +
i + "! = " + Find(i)+". ");Console.Write("Bam exit de thoat: ");if (Console.ReadLine() == "exit") break;
}}static int Find(int n){
if (n < 2) return 1;int m = 0;long k = 1;int c = 0;int[] mu = { 6, 2, 4, 8};for (int i = 2; i
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
14/60
Sng to trong Thut ton v Lptrnh Tp I 236
Gi S dng kt qu Bi 1. Trc ht bn cn vit hm Mu(n,p) cho ra s mcao nht ca s nguyn t p trong dng phn tch n! ra tha s nguyn t.
Th d,Mu(15,2) = 11;Mu(15,5) = 3.
Bi 8.3.
Hnh ch nht ti i trong ma trn 0/1.
Cho mt ma trn biu din bng mt mng hai chiu kch thc NM v chcha cc k t 0 v 1. Tm hnh ch nht cha ton k t 1 v c din tch lnnht (gi l hnh ch nht ti i).
D liu vo:Tp vn bn CNMAX.INP:
- Dng u tin: s t nhin M,
3 M 70
- Tip n l cc dng di bng nhau th hin mt xu gm M k t l ccch ci 0/1 vit lin nhau.
- S dng ca tp input c th ln ti 60 nghn.
D liu ra: tp vn bn CNMAX.OUT:- Dng u tin: Din tch ca hnh ch nht ti i ABCD cha ton k t 1
tm c.- Dng th hai: To dng v ct ca nh A.- Dng th ba: To dng v ct ca nh C.
1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
Hnh 4
Th d, vi ma trn 5 9 cha d liu nh hnh 4 th hnh ch nht ti i, tm gil ABCD, c din tch l 15 v c to im A l (dng 2, ct 3) v im C l (dng4, ct 7) nh trong hnh 4.
CNMAX.INP CNMAX.OUT
9100000000111111110001111100001111100000000000
152 34 7
Chng ta s xy dng mt thut ton gii bi ton tng qut hn nh sau:
Bi ton 8.3.1.Sn bay v trNgi ta cn xc nh mt vng hnh ch nht ABCD c din tch ln nht v bng
phng trn hnh tinh Vega xy dng sn bay v tr. Bn c cung cp mtmnh bn hnh tinh Vega, ni cn xc nh v tr xy dng mt sn bay. Mnhbn c dng hnh ch nht gm nhiu dng im m s t 1 tr i, mi dng c
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
15/60
Sng to trong Thut ton v Lptrnh Tp I 237
ng M im m s t 1 n M. Mi im c t mt mu th hin cao caim . Yu cu: xc nh hnh ch nht ABCD cha nhiu im ng mu nht.D liu vo: Tp vn bn CNMAX.INP.
-
Dng u tin: s t nhin M, 3
M
70.- Tip n l cc dng di bng nhau th hin mt xu gm M k t l ccch ci a..zvit lin nhau. Mi k t biu din cho mt mu th hin caoca im tng ng trn mnh bn hnh tinh Vega. Hai k t khc nhauthhin hai cao khc nhau. Hai im cng cao c biu din vicng mt k t.
- S dng ca tp input c th ln ti 60 nghn.
Th d:CNMAX.INP CNMAX.OUT
20
bcccddddeabcvvvvvvvbbbbbbccccccccccbbbbbvvvvvcccccccccccccbbvvcccccccccccccbbbbbpppppccccccccccabbbbpppppcccccccccczzzzzssccccccccccccczzzzzsssssccccccccccccczzhhhhhcccccccccczzzzzuuuuuuuuczzzzzzzzzzz
80
2 69 15
D liu ra: tp vn bn CNMAX.OUT:
- Dng u tin: Din tch ca hnh ch nht ti i ABCD tm c. - Dng th hai: To dng v ct ca nh A ( Ty-Bc).- Dng th ba: To dng v ct ca nh C ( ng-Nam).
Tnh tng qut ca bi ton 8.3.1 th hin im sau:- Tpkhng ch cha cc k t 0/1.
Bi gii
Do khng thc ton b d liu t tp CMAX.INPvo mt mng x l nnchng ta s c mi ln mt dng vo bin kiu xu k t (string) y. V hnh ch nhtABCD cn tm cha cng mt loi k t cho nn cc dng ca hnh s lin thng nhau. pht hin tnh lin thng chng ta cn dng thm mt bin kiu xu k t x ludng c v x l bc trc. Tm li l ta cn x l ng thi hai dng: x l dngtrc vy l dng ang xt.
Nu xt cc ct trong hnh ch nht cn tm ta thy chng phi cha cng mt loik t. Ta dng mt mng hvi ngha phn t h[i] ca mng cho bit tnh t v tr th ica dngytr ln c bao nhiu k t ging nhau (v ging vi k ty[i]). Ta gi h[i] l cao ca ct iv mng hkhi s c gi l cao ca dng ang xt.
Th d, mng tch lu caoca dng th 5 trong th d cho s l:h = (1,1,1,1,1,4,4,4,4,4,4,5,4,4,4,1,2,2,4,5)
A B
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
16/60
Sng to trong Thut ton v Lptrnh Tp I 238
C D
Bit cao, vi hai dngx vychng ta d dng tnh c din tch ca mi hnhch nht ABCD cha phn ty[i] trn cnh DC. Tht vy, gi s ta ang xt k t th i= 8 trn dng th 5 nh ni phn trn. Ta c h[8] = h[7] = h[6]= 4; h[9] = h[10] =h[11] = 4; h[12] = 5; h[13] = h[14] = h[15] = 4; h[16]=1,... Vy th, khi ta i t i v hai
pha, tri v phi, nu gp cc k t ging k ty[i] cn cao th khng nh hn h[i] tas thu c hnh ch nht ln nht cha k ty[i].
Vi dng th 5 l y ang xt, ta c:x = 'vvcccccccccccccbbbbb'; {dng thu 4 }
y = 'pppppccccccccccabbbb'; {dng thu 5 }
dng 1 2 3 4 5 6 7 9 10 11 12 13 14 15 16 17 18 19 204 x v v c c c c c c c c c c c c c b b b b b
5 y p p p p p c c c c c c c c c c a b b b b
h 1 1 1 1 1 4 4 4 4 4 4 5 4 4 4 1 2 2 4 5
trong x cha d liu ca dng th 4, y cha d liu ca dng th 5 trong tpCNMAX.INP.
T im i = 8 dch chuyn v bn tri ta thu c im c1 = 6; dch chuyn v bnphi ta thu c im c2 = 15. iu kin dch chuyn l:
(y[c1] = y[i]) and (h[c1] h[i]), nu qua tri v (y[c2] = y[i]) and (h[c2] h[i]), nu qua phi.Hai thao tc trn c t trong hm tnh din tch ca hnh ch nht ABCDln nht cha imy[i]. Hm cho ra ba gi tr: c1: im tri nht hay l to ct ca nh D. c2: im phi nht hay l to ct ca nh C. Din tch ca hnh.
(*-------------------------------------------Dien tich cua hinh chua diem y[i]
--------------------------------------------*)
function DienTich(i: byte; var c1,c2: byte): longint;begin{Qua trai}c1 := i;
while (y[c1-1] = y[i]) and (h[c1-1] >= h[i])do dec(c1);
{Qua phai}c2 := i;
while (y[c2+1] = y[i]) and (h[c2+1] >= h[i])do inc(c2);
DienTich := h[i]*(c2 + 1 - c1);end;
Phn x l chnh c t trong th tc Run.
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
17/60
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
18/60
Sng to trong Thut ton v Lptrnh Tp I 240
5. ng tp CNMAX.INP.
6. Thng bo kt qu.procedure Run;var i,c1,c2: byte;dt: longint;
beginassign(f,fn); reset(f); readln(f,m);d := 0;{Khoi tri cho dong dau tien}x := BL;for i := 1 to m do x := x + BL;{Khoi tri cho chieu cao}fillchar(h,sizeof(h),0);
while not eof(f) dobegin
readln(f,y);inc(d);{Chinh do cao}for i := 1 to m do
if y[i] = x[i] then inc(h[i]) else h[i] := 1;for i := 1 to m dobegin
dt := DienTich(i,c1,c2);if dt > dtmax thenbegin
dtmax := dt;Axmax := d-h[i]+1; Aymax := c1;Cxmax := d; Cymax := c2;
end;end;
x := y;end;
close(f);Ket; {ghi ket qua}
end;
phc tp tnh ton
Gi s tp CNMAX.INPcha n dng, mi dng cha mk t. Khi x l mt dng,
ti mi k t th itrn dng ta dch chuyn qua tri v qua phi, tc l ta phi thchin ti a mphp duyt. Vy, vi mi dng gm mk t ta phi thc hin m2 phpduyt. Tng cng, vi ndng ta thc hin ti a t= n.m2 phpduyt.
(* Pascal *)
(******************************************CNMAX Dien tich hinh chu nhat
toi dai******************************************)uses crt;const
fn = 'CNMAX.INP'; {Ten tep chua du lieu vao}gn = 'CNMAX.OUT'; {Ten tep chua du lieu ra}
MN = 80; {chieu rong van ban}
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
19/60
Sng to trong Thut ton v Lptrnh Tp I 241
BL = #32; {dau cach}NL = #13#10; {xuong dong moi}var f,g: text;
m: byte; {chieu rong tam ban do}
d: longint; {dem dong}x,y: string; {x - dong tren}
{y dong duoi}h: array[0..MN] of longint;{chieu cao cua cac cot}dtmax: longint; {Dien tich max}
Axmax, Cxmax: longint; {toa do diem A, C}Aymax,Cymax: byte;(*------------------------------
Ghi file ket qua--------------------------------*)
procedure Ket;begin
assign(g,gn); rewrite(g);writeln(g,Dtmax);writeln(g,Axmax,BL,Aymax);writeln(g,Cxmax,BL,Cymax);close(g);
end;(*--------------------------------------------
Dien tich cua hinh chua diem y[i]---------------------------------------------*)function DienTich(i: byte; var c1,c2: byte): longint;
t vitprocedure Run; t vitBEGIN
run;END.
// C#using System;using System.IO;namespace SangTao1{
/*------------------------------
* Chu nhat toi dai* -----------------------------*/
class ChuNhatMax{
static string fn = "cnmax.inp"; // input filestatic string gn = "cnmax.out"; // output filestatic string x;// dong trenstatic string y;// dong duoistatic int m = 0; // chieu dai moi dongstatic int[] d; // cao dostatic int dong = 0; // dem dong
static int smax = 0; // dien tich maxstatic int ad = 0; // toa do dong cua dinh Astatic int ac = 0; // toa do cot cua dinh A
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
20/60
Sng to trong Thut ton v Lptrnh Tp I 242
static int cd = 0; // toa do dong cua dinh Cstatic int cc = 0; // toa do cot cua dinh C
static void Main()
{Run(); Ghi(); Test();Console.ReadLine();
} // Mainstatic void Ghi(){
File.WriteAllText(gn, smax + "\n" +ad + " "+ ac+"\n"+cd+" "+cc);
}static void Test() t vitstatic void Run(){
StreamReader f = File.OpenText(fn);do // Bo cac dong trong dau file{
y = f.ReadLine().Trim();} while (y.Length == 0);m = int.Parse(y);Console.WriteLine(m);d = new int[m + 2];x = new string('#', m + 2);
Array.Clear(d,0,d.Length);dong = 0; smax = 0;
while (!f.EndOfStream){
y = f.ReadLine().Trim();if (y.Length < m) break;++dong; XY(); x = y;
}f.Close(); ac++; cc++;
}// Xu li cap dong x va ystatic void XY(){
int t = 0; // chi so traiint p = 0; // chi so phaiint dt = 0; // dien tichfor (int i = 0; i < m; ++i)
if (y[i] == x[i]) ++d[i];else d[i] = 1;
for (int i = 0; i < m; ++i){
t = Trai(i); p = Phai(i);dt = (p - t + 1) * d[i];if (smax < dt){
smax = dt;ad = dong - d[i] + 1; ac = t;cd = dong; cc = p;
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
21/60
Sng to trong Thut ton v Lptrnh Tp I 243
}}
}// quet tu k qua phai
static int Phai(int k){
for (int i = k + 1; i < m; ++i)if (d[i] < d[k]) return i - 1;
return m - 1;}// quet tu k qua traistatic int Trai(int k){
for (int i = k - 1; i >= 0; --i)if (d[i] < d[k]) return i + 1;
return 1;}
} // ChuNhatMac} // SangTao1
ng dng
Bi ton tm hnh ch nht ti i thng dng trong lnh vc ho v x l nh.Di y lit k vi ng dng in hnh.
1. Trong khi v bn ta thng phi tm mt hnh ch nht ti i trong mtvng, chng hn lnh th ca mt quc gia c th vit cc k t vo nhtn quc gia, tn chu lc.
2. Trong hnh hc phn hnh (fractal) ta thng phi tm mt s hnh vung hocch nht ti i tho mn mt s tiu chun cho trc lm mu.
Trong bi ny, trnh by vn c n gin chng ta thay mi im bngmt k t.
Bi tp lm thm
Bi T1.Vi mi k t ccho trc hy tm trong tp CNMAX.INPmt hnh ch
nht ti i cha ton k t c.
Bi T2.Vi cp gi tr (k, c) cho trc hy tm hnh ch nht ti i cha cng
mt loi k t v ng thi cha im nm trn dng k, ct c ca tp
CNMAX.INP.
Bi 8.4.Ma phngMa phng l nhng bng s hnh vung trong mi dng, mi ct v mi
ng cho u cng tho mt s tnh cht no . Cc nh thin vn c Trung
Hoa cho rng mi tinh t trn bu tri u ng vi mt ma phng. Nhiu nh
ton hc c Ai Cp, n v sau ny cc nh ton hc phng Ty pht
hin nhng tnh cht kh l th ca cc loi maphng. Trong bi ny ta giihn khi nim ma phng theo ngha sau.
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
22/60
Sng to trong Thut ton v Lptrnh Tp I 244
Ma phng bc nl mt bng s hnh vung, mi cnh n cha cc s t 1 n n2 sao
cho tng cc s trn mi dng, trn mi ct v trn mi ng cho u bng nhau.
Tng ny c gi l c s ca ma phng.
4 9 2 16 2 3 13
3 5 7 5 11 10 8
8 1 6 9 7 6 12
4 14 15 1
(a) (b)
(a)ma phng bc 3, c s S3
= 15
(b)ma phng bc 4, c s S4 = 34
Yu cu:Vi mi tr N = 1..20 xy dng ma phng bc n.
Bi gii
Ta d dng tnh c c s ca ma phng bc nqua nhn xt: tng ca mt ct(dng) chnh l tng ca ton b cc s nm trong bng chia cho s ct (s dng):
Sn = (1 + 2 + ... + n2)/n = n(n
2+ 1)/2.
Theo cc th d trn ta c:c s ca ma phng bc 3: S3 = 3(9 + 1)/2 = 15.c s ca ma phng bc 4: S4 = 4(16 + 1)/2 = 34.
Nh vy, trong ma phng bc 3, tng ca cc s nm trn cng hng, cng cthoc cng ng cho u l 15. Trong ma phng bc 4, tng ny l 34.
Tnh cht trn khng thay i nu ta in ln lt cc s hng ca mt cp s cngvo ma phng.
Ngoi bc n= 2, vi mi s t nhin n1 u tn ti ma phng vi nhiu cchb tr khc nhau. Chng ta s tm hiu hai thut ton d ci t.
Vi mi ncho trc ta xt tnh chn l ca n. Nu nl ta gi th tcMPL(ma phngbc l), ngc li ta gi th tc MPC(ma phng bc chn).
(*-------------------------------Ma phuong
--------------------------------*)procedure MP(bac: word);begin
n := bac;if n = 2 then exit;if Odd(n) then MPL else MPC;Test;
end;
Trong nl bin tng th cha bc ca ma phng cn xy dng.
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
23/60
Sng to trong Thut ton v Lptrnh Tp I 245
Hm Odd(n)cho gi tr ng (true) khi nl mt s l, ngc li hm nhn gi trsai (false).
Th tcMPL(n):Ma phng bc l
k
k + 1
in theo hng ng-Nam cho ma phng bc l.Ta dng mt mng hai chiu M cha ma phng cn xy dng theo cc bc
sau y. cho tin ta t tn cho ma phng cn xy dng l hnh vung ABCD.Bc 1. Khi tr:in cc s 0 vo bng M[1..n, 1..n].Bc 2. Xc nh xut pht: l gia ca dng cui, tc l
M[i,j] vi i = n,j = (n div 2) +1.Bc 3. in s:Vi mi kbin thin t 1 n n2ta thc hin cc thao tcsau:
3.1. in (i, j): M[i, j]:= k;3.2. Xc nh v tr ii,jj mi in s tip theo (k+ 1).
V tr ii,jjmi c xc nh theo nguyn tc ng-Nam vi ngha l sau khi in gi tr k, gi tr k+ 1 s c vit vo nm v tr ng -Nam so vi cha k.
Nh vy, nu M[i,j] = kth v tr cha k+1 s l ii:= i + 1,jj:=j + 1. C th s xy racc tnh hung sau y:
3.2.1. (i = n) v (j = n): S k vit gc ng-Nam (gc C) ca ma phng. Khi, nu i tip theo hng ng-Nam th s ri vo nm ngoi bng. Ta gi tnhhung ny l tnh hung ng-Nam v x l nh sau: vit s k+ 1 vo st trn chak, tc l chn
ii := n-1; jj := n;
Ta gi phng thc x l ny l n trn: n vo trn va vit (xem cc s 67 trong ma phng bc 3).
3.2.2. (i = n) v (j < n): S k vit nm cnh DC v khc C. Ta gi tnh hungny l tnh hung Namv x l theo phng thc "ni bt" nh sau: Vit k+ 1 vo vtr ng-Nam tc l
i+1 = n+1,j+1.
D nhin ny nm ngoi bng, di cnh DC. By gi ta cho n ni lnti cnhAB. Nh vy ta s chn
ii := (i mod n) + 1;
jj := (j mod n) + 1;
(xem cc s 1 2 v 8 9 trong ma phng bc 3).
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
24/60
Sng to trong Thut ton v Lptrnh Tp I 246
3.2.3. (i < n) v (j = n): S k vit nm cnh BC v khc C. Ta gi tnh hungny l tnh hung ngv x l theo theo phng thc y trinh sau: Vit k+ 1 vov tr ng-Nam tc l
i+1, j+1 = n+1
ny nm ngoi bng, bn phi cnh BC. By gi ta y tri n sang ti cnh AD.Ging nh trn, ta chn:
ii := (i mod n) + 1;
jj := (j mod n) + 1;
(xem cc s 2 3 v 7 8 trong ma phng bc 3).3.2.4. ng : Cui cng c th (ii, jj) ri vo trong bng nhng c s
c vit trc. Ta gi tnh hung ny l tnh hung ng v x l theo phng thcn trn nh tnh hung ng-Nam (xem bc i 3 v 4 trong ma phng bc 3).Trng hp ny ta chn:
ii := i- 1; jj := j;
S dng php ton ng d ta c th gii quyt t ng cc tnh hung Nam vng theo cng thc
ii := (i mod n)+1 ; jj := (j mod n)+1;
A B A B
k+1 k
k k+1
D C
ng-NamD C
ng
A B A B
k+1 k+1
k
k *
D C
Nam
D C
ng
Cc tnh hung khi in ma phng bc l
Di y l th tc ma phng bc l.(*---------------------------------
Ma phuong bac le----------------------------------*)
procedure MPL;var k,i,ii,j,jj: word;
begin{Buoc 1: Khoi tri}
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
25/60
Sng to trong Thut ton v Lptrnh Tp I 247
fillchar(M, sizeof(M),0);{Buoc 2: Xac dinh o xuat phat}i := n;j := n div 2 + 1;
{Buoc 3: Dien so}for k := 1 to n*n do
begin{3.1. Dien o (i,j)}
M[i,j] := k;{3.2 Xac dinh vi tri ii,jjcho so tiep theo (k+1)}
if (i=n) and (j=n) then{3.2.1.Tinh huong Dong-Nam:Den tren}begin
ii := n-1; jj := n;end
elsebegin {3.2.2 va 3.2.3.}ii := i mod n + 1;jj := j mod n + 1;end;
if M[ii,jj]0 {o da dien} thenbegin{3.2.4. Dung do: Den tren}ii := i-1; jj := j;end;
i := ii; j := jj;
end;end;
Th tcMPC(n):Ma phng bc chn
Bc 1. Khi tr:in cc s t 1 n n2 vo bng theo trt t t trn xung di,t tri sang phi. Th d, vi n= 4, M c khi tr nh sau:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Khi tr cho maphng bc 4
Bc 2. To xu mu:Ta to xu mu sphc v cho vic i ch cc s trong M.Xu mu s c chiu di k= ndiv 2 v bao gm cc k t 'T', 'D', 'N' v 'B' vi cc ngha sau:
- 'T' - thc hin php i xng tm:i ch cc cp phn t:M[i,j] M[n-i+1,n-j+1]
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
26/60
Sng to trong Thut ton v Lptrnh Tp I 248
M[i,n-j+1] M[n-i+1,j]- 'D' - thc hin php i xng theo trc dc:i ch cp phn t:
M[i,j] M[i,n-j+1]- 'N' - thc hin php i xng theo trc ngang:i ch cp phn t:
M[i,j] M[n-i+1,j]- 'B' - khng lm g.
Xu mu sc to nh sau:2.1. Khi tr xu rng s[0] := #0;
2.2. Tnh k := n div 2;
2.3. Np (k div 2) k t 'T' cho s.for i := 1 to (k div 2) do
s := s+TT;
2.4. Nu kl np thm hai k t 'DN' cho s:if Odd(k) then s := s+DD+NN;
2.5. in thm cc k t 'B' cho k k t trong s.for i := length(s)+1 to k do s := s+BB;
trong cc hng TT, DD,NN v BB c khai bo nh sauconst
TT = 'T'; {doi xung Tam}
DD = 'D'; {doi xung Doc}
NN = 'N'; {doi xung Ngang}
BB = 'B'; {Bo qua}
Cc th d to xu mu s:- Vi n = 4 ta c k = ndiv 2 = 2 (chn), kdiv 2 = 1, do s='TB'
- Vi n = 6 ta c k= n div 2 = 3 (l), kdiv 2 = 1, do s='TDN'
- Vi n = 18 ta c k= ndiv 2 = 9 (l), kdiv 2 = 4, do s='TTTTDNBBB'
Th tc khi tr cho ma phng bc chn s nh sau:(*-----------------------------------------
Khoi tri cho ma phuong bac chan------------------------------------------*)
procedure InitMPC;var i,j: word;
begin
{Buoc 1. Khoi tri}for i := 1 to n do
for j := 1 to n doM[i,j] := Num(i,j);
{Buoc 2: Tao xau mau}s[0] := #0; {Khoi tri xau rong}k := n div 2;{Nap (k div 2) ki tu T}for i := 1 to (k div 2) do s := s+TT;{Nap them 2 ki tu D va N neu k le}if Odd(k) then s := s+DD+NN;
{Bu cac ki tu B cho du k ki tu}for i := length(s)+1 to k do s := s+BB;end;
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
27/60
Sng to trong Thut ton v Lptrnh Tp I 249
Ch rng khi tr gi tr rng cho xu s ta c hai cch:Cch 1. Vit hai du nhy n st nhau:
s := '';
Cch 2. Gn cho phn t s[0] l ni cha chiu di xu sgi tr #0 ng vi kt c m ASCII l 0:s[0] := #0;
Cch th nht khin bn c d nhm vi du cch, nn dng cch th hai.Bc 3. in s theo xu mu
for i := 1 to k do
begin
XuLyDong(i);
QuayXauMau;
end;
x l dng i ta ln lt xt cc k t s[j] trong xu mu v x l tng phn tM[i,j],j = 1..length(s).
- Nu s[j] = 'T' ta gi th tc Tam(i,j,n) thc hin i xng tm cho cc (i, j) v (i, nj + 1).
- Nu s[j] = 'D' ta gi th tc Doc(i,j,n) thc hin i xng theo trc dccho (i, j).
- Nu s[j] = 'N' ta gi th tc Ngang(i, j, n) thc hin i xng theo trcngang cho (i, j).
- Nu s[j] = 'B' ta b qua.procedure XuLyDong(i: word);var j: word;
beginfor j := 1 to k docase s[j] of
TT: Tam(i,j);DD: Doc(i,j);
NN: Ngang(i,j);end;
end;
rng ti bc khi tr s nm trn (i, j) s c gi tr (i1)*n +j. Ta s sdng hm Num(i,j,n) tnh gi tr ny.
(*------------------------------------So nam tren hang i, cot j.
-------------------------------------*)function Num(i,j: word):word;
beginNum := (i-1)*n+j;
end;
Cc th tc ly i xng qua tm, dc v ngang l kh n gin.(*-------------------------------------
Lay doi xung qua tam (2 cap so)--------------------------------------*)
procedure Tam(i,j: word);
beginM[i,j] := Num(n-i+1,n-j+1);
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
28/60
Sng to trong Thut ton v Lptrnh Tp I 250
M[n-i+1,n-j+1] := Num(i,j);M[n-i+1,j] := Num(i,n-j+1);M[i,n-j+1] := Num(n-i+1,j);
end;
(*--------------------------------------Doi xung doc
--------------------------------------*)procedure Doc(i,j: word);begin
M[i,j] := Num(i,n-j+1);M[i,n-j+1] := Num(i,j);
end;(*-----------------------
Doi xung ngang------------------------*)
procedure Ngang(i,j: word);begin
M[i,j] := Num(n-i+1,j);M[n-i+1,j] := Num(i,j);
end;
Mi ln x l xong mt dng ta cn quay xu mu sthm mt v tr theo chiu kimng h, k t cui xu c a v u xu, cc k t khc c dch qua phi mt vtr.
Th d v quay xu mu s: Vi n = 18 ta c:s = 'TTTTDNBBB'
sau ln quay th nht ta thu c
s = 'BTTTTDNBB'sau ln quay th hai ta thu c
s = 'BBTTTTDNB'
quay xu s[1..k] ta ly k t cui cng s[k] ghp ln khc u s[1..k-1], tc l
ts := s[k]+s[1..k-1]
ly on s[1..k-1] ta gi hm copy:copy(s,1,len-1)
trong lenchnh l chiu di xu s.
Lnhcopy(s,i,m)
s to ra mt xu con ca xu svi mk t k t k t th i:copy(s,i,m) = s[i..(i+m-1)]
(*--------------------------Quay xau mau s 1 vi tri
---------------------------*)procedure QuayXauMau;var len: byte;
beginlen := length(s);
s := s[len] + copy(s,1,len-1);end;
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
29/60
Sng to trong Thut ton v Lptrnh Tp I 251
Sau y l th tc to ma phng bc chn.(*---------------------------
Ma phuong bac chan----------------------------*)
procedure MPC;var i,j: word;
beginif n=2 then exit;InitMPC;{Dien so theo xau mau}for i := 1 to k dobegin
XuLyDong(i);QuayXauMau;
end;
end;Sau khi to xong ma phng ta cn kim tra li xem ma trn M c tho cc tnhcht c bn ca ma phng bc ncho trc hay khng.
Th tc Tests hin th ma phng trn mn hnh v ng thi kim tra xem cctng cc phn t trn mi dng, tng cc phn t trn mi ct, tng cc phn t trnng cho chnh c1 v tng cc phn t trn ng cho ph c2 c bng c s cama phng hay khng.
Ta s dng hai mng dong[1..n], cot[1..n] v hai bin n c1, c2 tnh cc tngny bng mt ln duyt mng hai chiu M.
tnh c s ta lu kiu ca bin cha c s dl longinttrong khi cctr ca mng M l word. Trong Turbo Pascal c nguyn tc sau:
Nguyn tc nh kiu cho biu thc
Kiu ca tr ca biu thc s s l kiu rng nhttrong s cc kiu ca cc i lng (hng v bin)c mt trong biu thc.
Theo quy nh ny, vi khai bo nl bin kiu wordth kiu ca tr ca biu thctnh c s ca ma phng bc n
((n*n+1)*n) div 2
cng s lword.
iu ny c th dn n trn s.
Ta khc phc bng thao tc hai bc nh sau:d := 0;d := d+((n*n+1)*n) div 2;
Khi , do biu thc v phi ca php gn c cha bin d thuc kiu longintnn kt qu s c kiu longint.
Bn cng c th dng ton t chuyn sang kiu longintmt trong cc i lngtrong biu thc v phi, chng hn:
d := ((n*n+longint(1))*n) div 2(*--------------------------------
Hien thi va kiem tra ket qua----------------------------------*)
procedure Test;var i,j: word;
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
30/60
Sng to trong Thut ton v Lptrnh Tp I 252
dong, cot: ML1;d,c1,c2: longint;
begin {Tinh Dac so}d := 0;
d := d+((n*n+1)*n) div 2;writeln(NL,' Ma phuong bac ',n,', Dac so: ',d);fillchar(dong,sizeof(dong),0);fillchar(cot,sizeof(cot),0);c1 := 0;c2 := 0;for i := 1 to n dobegin
writeln;c1 := c1 + M[i,i];c2 := c2 + M[i,n-i+1];for j := 1 to n dobegin
write(M[i,j]:4);dong[i] := dong[i] + M[i,j];cot[j] := cot[j] + M[i,j];
end;end;
writeln;for i := 1 to n dobegin
if dong[i] d thenwriteln(' Sai dong ',i,BL,dong[i]);
if cot[i] d thenwriteln(' Sai cot ',i,BL, cot[i]);
end;if c1 d then writeln(' Sai cheo chinh ',c1);if c2 d then writeln(' Sai cheo phu ',c2);
end;
(* Pascal *)
Chng trnh MAPHUONG.PAS di y to b d liu kim th vi cc maphng t bc 1 n bc 20.
(* MAPHUONG.PAS *)
uses crt;const
MN = 50;TT = 'T'; {doi xung Tam}DD = 'D'; {doi xung Doc}
NN = 'N'; {doi xung Ngang}BB = 'B'; {Bo qua}BL = #32; {dau cach}
NL = #13#10; {qua dong moi}type
MW1 = array[0..MN] of word;
MW2 = array[0..MN] of MW1;ML1 = array[0..MN] of longint;var M: MW2;
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
31/60
Sng to trong Thut ton v Lptrnh Tp I 253
n,k: word;s: string;(*--------------------------------
Hien thi va kiem tra ket qua
----------------------------------*)procedure Test; t vit(*------------------------------------
So nam tren hang i, cot j-------------------------------------*)function Num(i,j: word):word;
beginNum := (i-1)*n+j;
end;(*-------------------------------------
Lay doi xung qua tam (2 so)--------------------------------------*)
procedure Tam(i,j: word); t vit(*--------------------------------------
Doi xung doc--------------------------------------*)
procedure Doc(i,j: word); t vitbegin
M[i,j] := Num(i,n-j+1);M[i,n-j+1] := Num(i,j);
end;(*--------------------------------------
Doi xung ngang
---------------------------------------*)procedure Ngang(i,j: word); t vit(*--------------------------
Quay xau mau s 1 vi tri---------------------------*)
procedure QuayXauMau; t vit(*-----------------------------------------
Khoi tri cho ma phuong bac chan------------------------------------------*)
procedure InitMPC; t vitprocedure XuLyDong(i: word); t vit(*---------------------------
Ma phuong bac chan----------------------------*)
procedure MPC; t vit(*---------------------------------
Ma phuong bac le----------------------------------*)
procedure MPL; t vit(*-------------------------------
Ma phuong--------------------------------*)
procedure MP(bac: word); t vit
(*--------------------------------Test cac ma phuong bac 1..20
----------------------------------*)
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
32/60
Sng to trong Thut ton v Lptrnh Tp I 254
procedure Run;var i: word;
beginclrscr;
for i := 1 to 20 do MP(i);end;BEGIN
Run;END.
// C#
using System;namespace SangTao1{
class maphuong{
const int mn = 50;static int[,] a = new int[mn, mn]; // Ma phuong
static char[] s = new char[mn]; // Xau maustatic void Main(string[] args){
for (int n = 1; n
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
33/60
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
34/60
Sng to trong Thut ton v Lptrnh Tp I 256
int[] row = new int[n];// col[j] = tong cot jint[] col = new int[n];int dacso = (n * n + 1) * n / 2;
Console.WriteLine("\n\n Ma phuong bac "+ n);
Console.WriteLine(" Dac so: " + dacso);for (int i = 0; i < n; ++i)
{ row[i] = col[i] = 0;}// tinh tong cac cot va dongfor (int i = 0; i < n; ++i){
c1 += a[i, i];c2 += a[i, n - 1 - i];for (int j = 0; j < n; ++j){ row[i] += a[i, j];col[j] += a[i, j];}
}if (c1 != dacso){Console.WriteLine("Loi Duong cheo 1:"
+" Dac so " + dacso + ", " + c1);return false;
}if (c2 != dacso){
Console.WriteLine("Loi Duong cheo 2:"
+" Dac so " + dacso + ", " + c2);return false;
}for (int i = 0; i < n; ++i){
if (row[i] != dacso){Console.WriteLine("Loi dong "
+(i+1)+ ": "+" Dac so "+dacso+", "+row[i]);
return false;}if (col[i] != dacso){Console.WriteLine("Loi cot "+(i+1)+": "+" Dac so "+dacso+ ", " + col[i]);return false;
}}return true;
}// Hien thi Ma phuong
static void Print(int n){
for (int i = 0; i < n; ++i)
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
35/60
Sng to trong Thut ton v Lptrnh Tp I 257
{Console.WriteLine();for (int j = 0; j < n; ++j)Console.Write("{0} ", a[i, j]);
}}
} // MaPhuong}// SangTao1
Cc bi ton Thp H Ni
Bi 8.5. Thp H Ni c
1 2 3
Hnh 5.Bi ton thp H Ni
C ba cc cm ti ba v tr l 1, 2 v 3 nh hnh 5. Trn mt cc, gi l cc a
c mt chng gm n a bng g hnh trn to nh khc nhau c xuyn l gia ta nh nhng ng xu v t chng ln nhau to ra mt to thp.Ngi chi phi chuyn c to thp sang cc b a theo cc quy tc sau:(1) Ngi chi c s dng cc cn li t tm cc tng thp.(2) Mi ln ch c chuyn 1 tng thp t mt cc sang mt trong hai cc cnli.(3) Khng bao gi c t tng thp ln ln trn tng thp nh.
Hy tm cch gii bi ton trn vi s ln chuyn t nht.
Thut tonChc chn l bn bit cch gii bi ton trn. Tuy nhin c th gii d dng
cc bin th ca bi ton thp H Ni chng ta th tm hiu mt cch lp lun sau.Gi s ta quanst mt ngi chi gii, tc l ngi chuyn c n tng thp t cc1 sang cc 2 vi s ln chuyn ti thiu. Ta dng mt chic my nh chp tng kt qutrung gian sau mi bc chuyn ca ngi chi ny. Tng s bc nh, tr tm nh banu, chnh l sbc chuyn cc tng. Trong s cc bc nh chc chn phi c mt bcnh hnh 10.
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
36/60
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
37/60
Sng to trong Thut ton v Lptrnh Tp I 259
assign(f,'hanoi.out');rewrite(f);
th sau mi lnhwrite(f,);
s ghi d liu vo tp hanoi.out trn a.Chng trnh hon chnh di y s ghi kt qu vo tp vn bn hanoi.out
c m trn a. Trc khi ghi chnh thc, bn hy chy th chng trnh vi lnh mtp c tn rng kim tra kt qu trn mn hnh. Sau khi thy ng , bn hy vit tntp c th lu kt qu vo a.
Chng trnh s dng bin m dnhm m s bc chuyn.
(* Pascal *)
uses crt;
var d: longint;
f: text;procedure Hn(n,a,b: byte);begin
if n = 0 then exit;Hn(n-1,a,6-a-b);inc(d);
writeln(f,d,'. ',a,' -> ',b);Hn(n-1,6-a-b,b);
end;procedure runHn(n: byte);begin
d := 0;assign(f,'hanoi.out');rewrite(f);
writeln('-----------------');Hn(n,1,2);
writeln(f,'Total: ',d,' step(s)');close(f);readln;
end;BEGIN
runHn(3);END.
Khi thc hin chng trnh Hanoi.pasvi n = 3 ta thu c kt qu sau:
1. 1 -> 2
2. 1 -> 3
3. 2 -> 3
4. 1 -> 2
5. 3 -> 1
6. 3 -> 2
7. 1 -> 2
Total: 7 step(s)
// C#
using System;namespace Tap1
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
38/60
Sng to trong Thut ton v Lptrnh Tp I 260
{/*------------------------------------* Thap Ha Noi* -----------------------------------*/
class ThapHaNoi{
static int d = 0; // em so lan chuyenstatic void Main(){
Console.WriteLine("\n Ha Noi ");HaNoi(3, 1, 2);Console.ReadLine();
} // Mainstatic void HaNoi(int n, int a, int b){
if (n == 0) return;HaNoi(n - 1, a, 6 - a - b);Console.WriteLine((++d) +
". " + a + " -> " + b);HaNoi(n - 1, 6 - a - b, b);
}} // class
} // space
Bi 8.6. Thp H Ni xuiNi dung ging nh bi ton thp H Ni c ch sa li quy tc (2) nh sau: (2)
Mi ln ch c chuyn 1 tng thp t mt cc sang cc st n theo chiu kimng h.
iu kin ny quy nh ba php chuyn 1 tng thp gia cc cc nh sau:, hoc , hoc .
Hy tm cch gii bi ton vi s ln chuyn t nht.Bi gii
Suy ngh mt cht bn s thy ci li ca nguyn tc "Bc nh buc phi c". ttn cc tng thp theo th t t nh n ln l 1..n. Ta m t mi tm nh nh mt bba (a:[A], b:[B], c:[C]) trong A, B v C l cc tng thp t ti mi v tr tng ng.Gi al v tr xut pht, bl v tr ch, bi ton trn c th c pht biu nh sau:
Ga thit: (a:[1..n], b:[ ], c:[ ])
Kt lun: (a:[ ], b:[1..n], c:[ ])
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
39/60
Sng to trong Thut ton v Lptrnh Tp I 261
Vi ngha l cho bit bc nh ban u v cui cng. Hy lit k t nht cc bcnh cn c gia ba du chm () sao cho b nh gii thch c qu trnh chuynthp theo cc iu kin cho trc.
Mi bc nh c gi l mt hnh trng. Ngoi hai hnh trng u tin v cui
cng, mt trong nhng hnh trng buc phi c s l (a:[n ],b:[ ],c:[1..n-1]). Tip l hnh trng (a:[ ],b:[n ],c:[1..n-1 ])thu c sau lnhchuyn a b
Gi Hnx(n,a,b)l th tc gii bi ton thp H Ni xui, chuyn thp ntng tv tr asang v tr b. Ta xt hai trng hp.
a) Trng hp v tr bng st v tr a theo chiu kim ng h:Theo trng hp ny ta c cc cp (a, b) sau y: (1, 2), (2, 3) v (3, 1).
c t cho iu kin ca trng hp ny l b = (a mod 3)+1Vi ngha l, nu bit m s v tr ath v tr bst sau a xui theo chiu kim ng
h s c tnh theo cng thc trn.
Nu v tr cc cc c b tr nh sau
th gia a v b c ba tnh hung, c th l
Tnh hung
1 a b
2 a b
3 b a
Thp H Ni xui
c t a v b k nhau b = (a mod 3)+1Da vo cc hnh trng buc phi c ta c th m t vic chuyn thp trong trng
hp ny ging nh trong bi ton thp H Ni c, c th l:
Hnh trng ngha Lnh(a: [1..n], b: [ ], c: [ ]) Hnh trng ban u vi v tr b st
v tr a.b = (a mod 3)+1
chuyn n tng t a sang b theochiu kim ng h ta phi...
...(a: [n], b: [ ], c: [1..n 1]) Chuyn (tm) n1 tng t a quac
= 6ab.Hnx(n1, a, 6 a
b)(a: [ ], b: [n], c: [1..n 1]) sau chuyn tng cn li ca a
qua b.a b
...(a: [ ], b: [1..n], c: [ ]) Cui cng chuyn n 1 tng t c =
6ab qua b l hon tt.Hnx(n 1, 6 a
b, b)
on trnh cho trng hp ny s lif b = (a mod 3)+1 thenbegin {b ke a}
Hnx(n-1,a,6-a-b);
inc(d);writeln(f,d,'. ',a,' -> ',b);Hnx(n-1,6-a-b,b);
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
40/60
Sng to trong Thut ton v Lptrnh Tp I 262
end
b) Trng hp v tr b khng ng st v tr a theo chiu kim ng h: Cc cp (a, b) khi s l: (1, 3), (2, 1) v (3, 2). c im chung ca cc cp ny
l: nu i t a n b theo chiu kim ng h chng ta phi vt qua c l v tr nm giaa v b.
Tnh hung
1 a b
2 b a
3 b a
Thp H Ni xuic t a v b khng k nhau b (a mod 3) + 1
Cc hnh trng buc phi c khi s l:Hnh trng ngha Lnh
(a: [1..n], c: [ ], b: [ ]) Hnh trng ban u vi v tr b cch aqua c theo chiu kim ng h.
b (a mod 3) + 1
chuyn n tng t a sang b cchqua v tr c = 6 ab ta phi...
...
(a: [n], c: [ ], b: [1..n 1] Chuyn (tm) n1 tng t a qua b. Hnx(n 1, a, b)
(a: [ ], c: [n], b: [1..n 1]) sau chuyn (tm) tng cn li ca
a qua c = 6ab.a 6 a b
...
(a: [1..n 1], c: [n], b: [ ]) Ri li chuyn (tm) n 1 tng t bqua a nhm gii phng v tr ch b...
Hnx(n 1, b, a)
(a: [1..n 1], c: [ ], b: [n]) chuyn tng ln nht n t c qua b. 6 a b b
(a: [ ], c: [ ], b: [1..n]) Cui cng chuyn n 1 tng t a quab l hon tt.
Hnx(n 1, a, b)
(* Pascal *)
(*******************************
Ha Noi xuoi*******************************)uses crt;var d: longint;f: text;
procedure Hnx(n,a,b: byte);begin
if n = 0 then exit;if b = (a mod 3)+1 thenbegin {b ke a}
Hnx(n-1,a,6-a-b);
inc(d);writeln(f,d,'. ',a,' -> ',b);Hnx(n-1,6-a-b,b);
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
41/60
Sng to trong Thut ton v Lptrnh Tp I 263
endelse {b cach a qua vi tri c}begin
Hnx(n-1,a,b);
inc(d);writeln(f,d,'. ',a,' -> ',6-a-b);Hnx(n-1,b,a);inc(d);
writeln(f,d,'. ',6-a-b,' -> ',b);Hnx(n-1,a,b);
end;end;
procedure runHnx(n: byte);begin
d := 0;assign(f,'hnx.out');rewrite(f);
writeln('-----------------');Hnx(n,1,2);
writeln(f,'Total: ',d,' step(s)');close(f);readln;
end;BEGIN
runHnx(3);END.
Li gi runHnx(3)chuyn n tng thp t cc 1 sang cc 2 s cho ta kt qu sau:
1. 1 -> 2
2. 2 -> 3
3. 1 -> 2
4. 3 -> 1
5. 2 -> 3
6. 1 -> 2
7. 2 -> 3
8. 1 -> 2
9. 3 -> 1
10. 1 -> 2
11. 3 -> 1
12. 2 -> 3
13. 1 -> 2
14. 3 -> 1
15. 1 -> 2
Total: 15 step(s)
// C#
using System;namespace SangTao1{
/*------------------------------------* Thap Ha Noi Xuoi* -----------------------------------*/
class ThapHaNoiXuoi{
static int d = 0;//so buoc chuyen tang thapstatic void Main(){
Console.WriteLine("\n Ha Noi Xuoi");HaNoiXuoi(3, 1, 2);Console.WriteLine("\n Total: "
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
42/60
Sng to trong Thut ton v Lptrnh Tp I 264
+ d + " steps");Console.ReadLine();
} // Mainstatic void HaNoiXuoi(int n, int a, int b)
{if (n == 0) return;if (b == (a % 3) + 1){
HaNoiXuoi(n - 1, a, 6 - a - b);Console.WriteLine((++d)+". "+a
+" -> "+b);HaNoiXuoi(n - 1, 6 - a - b, b);
}else // a c b, c = 6-a-b{
HaNoiXuoi(n - 1, a, b);Console.WriteLine((++d)+". "+a+
" -> "+(6-a-b));HaNoiXuoi(n - 1, b, a);Console.WriteLine((++d)+". "+
(6-a-b)+" -> "+b);HaNoiXuoi(n - 1, a, b);
}}
} // ThapHaNoiXuoi} // SangTao1
Bi 8.7. Thp H Ni ngcNi dung ging nh bi ton thp H Ni c ch sa li quy tc (2) nh sau: (2)Mi ln ch c chuyn 1 tng thp t mt cc sang cc st n v hngngc chiu kim ng h.iu kin ny quy nh ba php chuyn 1 tng thp nh sau:
, hoc , hoc .Hy tm cch gii bi ton vi s ln chuyn t nht.
Bi gii
Bi ny tng t nh bi H Ni xui. Ta ch cn xc nh iu kin k gia haicc thp v lu n chiu chuyn cc tng thp ngc chiu quay ca kim ng h.
a) Trng hp v tr b ng st v tr a ngc chiu kim ng h: Theo trng hp ny ta c cc cp (a, b) sau y: (3, 2), (2, 1) v (1, 3).Hon i v tr ca hai i lng a v b trong iu kin k ca bi ton H Ni xui
ta thu c iu kin k trong trng hp ny la = (bmod3)+1
Tnh hung
1 a b
2 b a
3 b a
Thp H Ni ngcc t a v b k nhau a = (b mod 3) + 1
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
43/60
Sng to trong Thut ton v Lptrnh Tp I 265
Vi ngha l, nu bit m s v tr ath v tr b st sau angc chiu kim ng hs c tnh theo cng thc trn.
Da vo cc hnh trng buc phi c ta c th m t vic chuyn thp trong trnghp ny ging nh trong bi ton thp H Ni xui, c th l:
Hnh trng ngha Lnh
(a: [1..n], b: [ ], c: [ ]) Hnh trng ban u vi v tr b st vtr a.
a = (b mod 3) + 1
chuyn n tng t a sang b ngcchiu kim ng h ta phi...
...
(a: [n], b: [ ], c: [1..n 1]) Chuyn (tm) n 1 tng t a qua c =
6 a b.
Hnn(n 1, a, 6
a b)
(a: [ ], b: [n], c: [1..n 1]) sau chuyn tng cn li ca a quab.
a b
...
(a: [ ], b: [1..n], c: [ ]) Cui cng chuyn n 1 tng t c = 6 a b qua b l hon tt.
Hnn(n 1, 6
a b, b)
on trnh cho trng hp ny s lif a = (b mod 3)+1 then
begin {b ke a}hnn(n-1,a,6-a-b);inc(d);
writeln(f,d,'. ',a,' -> ',b);hnn(n-1,6-a-b,b);
end
b) Trng hp v tr bkhng ng st v tr atheo chiu ngc kim ngh:Cc cp (a, b) khi s l: (1, 2), (2, 3) v (3, 1). c im chung ca cc cp ny
l: nu i t an b ngc chiu kim ng h chng ta phi vt qua cl v tr nmgia a v b.
Tnh hung 1 a b
2 a b
3 b a
Thp H Ni ngcc t a v b khng knhau
a (b mod 3) + 1
Cc hnh trng buc phi c khi s rt ging vi tnh hung tng t ca biton H Ni xui:
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
44/60
Sng to trong Thut ton v Lptrnh Tp I 266
Hnh trng ngha Lnh
(a: [1..n], c: [ ], b: [ ]) Hnh trng ban u vi v tr b ccha qua c ngc chiu kim ng h.
a (b mod 3) + 1
chuyn n tng t a sang b cchqua v tr c = 6 a b ta phi...
...
(a: [n], c: [ ], b: [1..n 1] Chuyn (tm) n 1 tng t a qua b. Hnn(n 1, a, b)
(a: [ ], c: [n], b: [1..n 1]) sau chuyn (tm) tng cn lica a qua c = 6 a b.
a 6 a b
...
(a: [1..n-1], c: [n], b: [ ]) Ri li chuyn (tm) n 1 tng t bqua a nhm gii phng v tr ch b...
Hnn(n 1, b, a)
(a: [1..n-1], c: [ ], b: [n]) chuyn tng ln nht n t c quab. 6 a b b
(a: [ ], c: [ ], b: [1..n]) Cui cng chuyn n 1 tng t aqua b l hon tt.
Hnx(n 1, a, b)
(* Pascal *)
(**************************************Hano.pas H Ni NgcChuyn php ngc chiu kim ng h.*************************************)uses crt;
var d: longint;f: text;
procedure hnn(n,a,b: byte);beginif n = 0 then exit;if a = (b mod 3)+1 thenbegin {b ke a}
hnn(n-1,a,6-a-b);inc(d);
writeln(f,d,'. ',a,' -> ',b);hnn(n-1,6-a-b,b);
endelse {b cach a qua vi tri c}begin
hnn(n-1,a,b);inc(d);
writeln(f,d,'. ',a,' -> ',6-a-b);hnn(n-1,b,a);inc(d);
writeln(f,d,'. ',6-a-b,' -> ',b);hnn(n-1,a,b);
end;end;
procedure runhnn(n: byte);begin
d := 0;
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
45/60
Sng to trong Thut ton v Lptrnh Tp I 267
assign(f,'hnn.out');rewrite(f);
writeln('-----------------');hnn(n,1,2);
writeln(f,'Total: ',d,' step(s)');close(f);readln;
end;BEGIN
runHnn(3);END.
Kt qu:
1. 1 -> 3
2. 3 -> 2
3. 1 -> 3
4. 2 -> 1
5. 3 -> 2
6. 1 -> 3
7. 3 -> 2
8. 1 -> 3
9. 2 -> 1
10. 1 -> 3
11. 2 -> 1
12. 3 -> 2
13. 2 -> 1
14. 3 -> 2
15. 1 -> 3
16. 3 -> 2
17. 1 -> 3
18. 2 -> 1
19. 3 -> 2
20. 1 -> 3
21. 3 -> 2
Total: 21 step(s)
Nhn xtMi xem ta c cm tng rng li gi Hnn(3,1,2) v Hnx(3,1,2) chuyn thp
3 tng t cc 1 sang cc 2 phi cho cng mt s bc chuyn cc tng l 15. Tuy nhin, li giHnn(3,1,2)cho ta 21 bc chuyn cc tng, trong khi li gi Hnx(3,1,2)ch cn 15
bc chuyn cc tng.Suy ngm mt cht bn s gii thch cnghch l ny.Hy th gi H Ni ngc chuyn thp 3 tng t cc 3 sang cc 2:
Hnn(3,3,2)
Ta s thy ch cn 15 bc!!!Li gi H Ni xui chuyn thp 3 tng t cc 1 sang cc 3:
Hnx(3,1,3)Ta li thy 21 bc.
Nh vy, Hnx v Hnn l i xng lch. Nu hai cc, ngun v ch k nhau th sln chuyn thp 3 tng s l 15. Ngc li, khi hai cc khng k nhau th s lnchuyn thp 3 tng s l 21. Hai cc 1 v 2 l k nhau i vi thp H Ni xui nhngkhng k nhau i vi thp H Ni ngc. Tng t, hai cc 3 v 2 l k nhau i vithp H Ni ngc nhng khng k nhau i vi thp H Nixui.
Ta nhn xt rng: nu ly hai s a, b khc nhau bt k trong ba s 1, 2 v 3 th gia a vb ch xy ra mt trong hai trng hp loi tr nhau sau y:
b = (a mod 3) +1,hoc a = (b mod 3)+1
Do , quan h k nhau trong hai bi ton Thp H Ni xui v ngc l ph nhi vi nhau.
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
46/60
Sng to trong Thut ton v Lptrnh Tp I 268
H Ni xui H Ni ngcb = (a mod 3)+1 a v b k nhau a v b khng k nhau
a = (b mod 3)+1 a v b khng k nhau a v b k nhau
Quan h k nhau trong hai bi tonthp H Ni xui v ngc
// C#
using System;namespace SangTao1{
/*------------------------------------* Thap Ha Noi Nguoc* -----------------------------------*/
class ThapHaNoiNguoc{static int d = 0;static void Main(){
Console.WriteLine("\n Ha Noi Nguoc ");HaNoiNguoc(3, 1, 2);Console.WriteLine("\n Total: " + d
+ " steps");Console.ReadLine();
} // Mainstatic void HaNoiNguoc(int n, int a, int b)
{if (n == 0) return;if (a == (b % 3) + 1){
HaNoiNguoc(n - 1, a, 6 - a - b);Console.WriteLine((++d) + ". " +
a + " -> " + b);HaNoiNguoc(n - 1, 6 - a - b, b);
}else // b c a, c = 6-a-b{
HaNoiNguoc(n - 1, a, b);Console.WriteLine((++d)+". "+a+" -> "+(6-a-b));
HaNoiNguoc(n - 1, b, a);Console.WriteLine((++d)+". "+
(6-a-b)+" -> "+b);HaNoiNguoc(n - 1, a, b);
}}
} // ThapHaNoiNguoc} // SangTao1
Bi 8.8. Thp H Ni thng
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
47/60
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
48/60
Sng to trong Thut ton v Lptrnh Tp I 270
chuyn n tng t a sang btheo ng thng ta phi...
...
(a: [n], b: [ ], c: [1..n 1]) Chuyn (tm) n 1 tng t aqua c = 6 a b.
Hnt(n 1, a, 6 a b);
(a: [ ], b: [n], c: [1..n 1]) sau chuyn tng cn li caa qua b.
a b
...
(a: [ ], b: [1..n], c: [ ]) Cui cng chuyn n 1 tngt c = 6 a b qua b l hontt.
Hnt(n 1, 6 a b, b);
Trng hp th hai a v b cch nhau qua c trn ng thng. Ta c c = 2 v ch chai tnh hung cho a v b nh sau:
Hnh trng ngha Lnh(a: [1..n], c: [ ], b: [ ]) Hnh trng ban u vi v tr b
khng k vi v tr a trn ng
thng. abs(a b) 1Ta c c = 2.
chuyn n tng t a sang bcch qua v tr c = 2 ta phi...
...
(a: [n], c: [ ], b: [1..n 1] Chuyn (tm) n 1 tng t a quab.
Hnt(n 1, a, b)
(a: [ ], c: [n], b: [1..n 1]) sau chuyn (tm) tng cuica a qua c = 2.
a 2
...(a: [1..n-1], c: [n], b: [ ]) Ri li chuyn (tm) n 1 tng
t b qua a nhm gii phng v trch b.
Hnt(n 1, b, a)
(a: [1..n-1], c: [ ], b: [n]) chuyn tng ln nht n t c =2 qua b.
2 b
(a: [ ], c: [ ], b: [1..n]) Cui cng chuyn n 1 tng t aqua b l hon tt.
Hnt(n 1, a, b)
(* Pascal *)
(****************************HNT.PAS Ha Noi thangChuyen n tang thap tu coc asang coc b theo duong thang
1->2, 2->1 hoac 2->3, 3->21 2 3****************************)
Tnh hung
1 a c b
2 b c a
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
49/60
Sng to trong Thut ton v Lptrnh Tp I 271
uses crt;var d: longint;f: text;
procedure Hnt(n,a,b: byte);
beginif n = 0 then exit;if abs(a-b) = 1 thenbegin
Hnt(n-1,a,6-a-b);inc(d);
writeln(f,d,'. ',a,' -> ',b);Hnt(n-1,6-a-b,b);
endelse
{-----------------------------abs(a-b)=2 tuc la a = 1, b = 3hoac a = 3, b = 1, do do c=2------------------------------}
beginHnt(n-1,a,b);inc(d);
writeln(f,d,'. ',a,' -> 2');Hnt(n-1,b,a);inc(d);
writeln(f,d,'. 2 -> ',b);Hnt(n-1,a,b);
end;
end;procedure runHnt(n: byte);begin
d := 0;assign(f,'hnt.out');rewrite(f);
writeln('-----------------');Hnt(n,1,2);
writeln(f,'Total: ',d,' step(s)');close(f);readln;
end;BEGIN
runHnt(3);END.Kt qu1. 1 -> 2
2. 2 -> 3
3. 1 -> 2
4. 3 -> 2
5. 2 -> 1
6. 2 -> 3
7. 1 -> 2
8. 2 -> 39. 1 -> 2
10. 3 -> 2
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
50/60
Sng to trong Thut ton v Lptrnh Tp I 272
11. 2 -> 1
12. 3 -> 2
13. 1 -> 2
Total: 13 step(s)// C#
using System;namespace SangTao1{
/*------------------------------------* Thap Ha Noi Thang* -----------------------------------*/
class ThapHaNoiThang{
static int d = 0;
static void Main(){
Console.WriteLine("\n Ha Noi Thang");HaNoiThang(3, 1, 2);Console.WriteLine("\n Total: " +
d + " steps");Console.ReadLine();
} // Main/*------------------------------------
Ha Noi Thang* -----------------------------------*/
static void HaNoiThang(int n, int a, int b){if (n == 0) return;if (Math.Abs(a - b) == 1){
HaNoiThang(n - 1, a, 6 - a - b);Console.WriteLine((++d)+
". "+a+" -> "+b);HaNoiThang(n - 1, 6 - a - b, b);
}else // a c b, b c a, c = 6-a-b{
HaNoiThang(n - 1, a, b);Console.WriteLine((++d)+
". "+a+" -> "+(6-a-b));HaNoiThang(n - 1, b, a);Console.WriteLine((++d)+
". "+(6-a-b)+" -> "+b);HaNoiThang(n - 1, a, b);
}}
} // ThapHaNoiThang} // SangTao1
Bi 8.9. Thp H Ni sc mu (H Ni Cu vng)Ngi ta sn mi tng thp mt mu v quy nh lut chuyn cho mi loi tngtheo mu nh m t trong bng sau.
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
51/60
Sng to trong Thut ton v Lptrnh Tp I 273
K hiu Mu ngha chuyn tng Quy tcx xanh xui chiu kim ng h n nu ngc chiu kim ng h t trng thng h hng t do (h ni kinh i n)
Ngoi ra, d nhin vn phi theo quy nh l tng to khng c t ln trntng nh.Hy tm cch gii bi ton vi s ln chuyn t nht.
Th d, vi cc tng thp c t mu t trn (tng nh nht) xung di (tng lnnht) l:
xanh
nu
xanh
hngtrng
H Ni sc mu 5 tng xnxhtv cn chuyn thp t cc 1 sang cc 2 th phi thc hin ti thiu 31 ln chuyn cctng nh sau:
1. 1 -> 2
2. 1 -> 3
3. 2 -> 3
4. 1 -> 2
5. 3 -> 16. 3 -> 2
7. 1 -> 2
8. 1 -> 3
9. 2 -> 3
10. 2 -> 1
11. 3 -> 1
12. 2 -> 3
13. 1 -> 2
14. 1 -> 3
15. 2 -> 3
16. 1 -> 2
17. 3 -> 1
18. 3 -> 2
19. 1 -> 2
20. 3 -> 1
21. 2 -> 322. 2 -> 1
23. 3 -> 1
24. 3 -> 2
25. 1 -> 2
26. 1 -> 3
27. 2 -> 3
28. 1 -> 2
29. 3 -> 1
30. 3 -> 2
31. 1 -> 2
Total: 31 step(s)
Bi gii
iu l th l th tc H Ni sc mu l kh tng qut v ta c th dng n gicho cc bi ton v thp H Ni xt. Bng di y cho bit cch s dng th tcHnmcho cc trng hp ring.
Mun gi Th gi Ch thch
Hn(n,a,b) s := 'hhh';Hnm(length(s),a,b);
s cha n k t 'h'
Hnx(n,a,b) s := 'xxx';Hnm(length(s),a,b);
s cha n k t 'x'
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
52/60
Sng to trong Thut ton v Lptrnh Tp I 274
Hnn(n,a,b) s := 'nnn';Hnm(length(s),a,b);
s cha n k t 'n'
Hnt(n,a,b) s := 'ttt';
Hnm(length(s),a,b);
s cha n k t 't'
Ta quy c d liu ban u c m t trong bin tng th kiu xu k t s vi khaibo nh sau:
var s: string
Trong th d trn, s s c gn tr ls := 'xnxht';
Khi c th khai bo th tc thp H Ni sc mu nh sau:procedure Hnm(n: byte; a,b: byte);
trong n l s tng thp, a v b l hai cc khc nhau cho trc v nhn cc gi tr 1, 2hoc 3.
Ta vit thm th tc runHnm(Thap: string) t chc li gi thun tin chobi ton H Ni sc mu nh sau.
Tham bin Thapkiu strings cha m t c th cho cc tng thp. Th d, ligi
runHnm('xnxht');
s x l thp 5 tng, tnh t trn xung, tc l t tng nh nht c m s 1 n tng y,tng ln nht mang m s 5 nh sau:
Tng (i) Mu (Thap[i])
1 'x'
2 'n'3 'x'
4 'h'
5 't'
Gi th tc cho biH Ni Sc mu
runHnm('xnxht')Cch m s ny ngc vi quy tc gi cc tng trong i thng. Ngi ta thng
m s cc tng ca to nh t di ln l 1, 2,
Vi li gi
runHnm(Thap:string);
th gi tr ca tham tr Thaps c truyn cho mt bin tng th s:
s := Thap;
Sau l li gi c th Hnmtheo s tng thp length(s), cc ngun (ni t tng
thp ban u) a = 1 v cc ch, ni cn chuyn thp n, b = 2.
Hnm(length(s),1,2);
S d phi dng mt bin tng th s lu li cu hnh thp v ta mun hn ch tn
km pht sinh trong li gi quy ca th tc Hnm.
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
53/60
Sng to trong Thut ton v Lptrnh Tp I 275
Nu khai bo Hnmvi bn tham bin nh sau:
procedure Hnm(Thap: string; n,a,b: byte);
th r rng l s tn km hn.
Bin tng th dc khi tr 0 s c dng m s bc chuyn cc tng thp.
procedure runHnm(Thap:string);
begin
s := Thap;
d := 0;
assign(f,'hnm.out');
rewrite(f);
writeln('-----------------');
Hnm(length(s),1,2);
writeln(f,'Total: ',d,' step(s)');
close(f);
readln;
end;
BEGIN
runHnm('txhxn');
END.
Mi khi x l mt tng thp i, ta xemmu s[i] ca tng v la chn quyt nh
nh trong bng sauTa nhn xt rng, trong mi tnhhung, tc l vi mi mu khc nhau catng thp, khi hai cc a v bk nhau th tacn thc hin cc thao tc nh nhau,cth l:
Vy ta ch cn c t tnh cht kgia hai cc a vb l xong.
Ta thy, da theo lut chuyn, vi thp H Ni c, hai cc a v b khc nhau ty c xem l k nhau. Vi thp H Ni xui, cc bphi ng st cc atheo chiu kim
ng h:
b = (a mod 3)+1
Vi thp H Ningc, b phi ng sta theo chiu quayngc ca kim ngh. Ni cch khc, a
phi ng st b theo chiu kim ng h:
a = (b mod 3)+1
Vi thp H Ni thng, nh ta bit, gi tr ca a v b phi lch nhau ng 1 nv:
Nu s[i] c mu Th x l nh thtc
'x' hnx
'n' hnn
't' hnt
'h' hn
Phng thc x l cho bi tonH Ni sc mu
Gi th tc ngha
Hnm(n 1, a, 6 a b) Chuyn n 1 tng trn cng t aqua c = 6 a b
a b Chuyn tng cui cng t a sangb
Hnm(n 1, 6 a b, b) Chuyn n 1 tng thp t c = 6 a b qua b
H Ni sc muChuyn thp trong trng hp a v b k nhau
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
54/60
Sng to trong Thut ton v Lptrnh Tp I 276
abs(a-b) = 1
Bng di y m t cc trng hp trn.
Bi ton K hiu iu kin a k b(a b)
Minh ho
H Ni C h Lun ng (True) ,,,
,
H Ni Xui x b = (a mod 3) + 1 , ,
H Ni Ngc n a = (b mod 3) + 1 , ,
H Ni Thng t abs(a b) = 1 , , ,
H Ni sc muCc iu kin k gia hai cc a v ba, b = 1, 2, 3; a b
Hm Ke(k) khi s c m t nh sau. function Ke(n,a,b: byte): Boolean;
begincase s[n] of
'x': ke := (b = (a mod 3)+1);'n': ke := (a = (b mod 3)+1);'t': Ke := (abs(a-b) = 1);
'h': Ke := True;end {case};end;
Tng t, khi hai cc a v b khng k nhau ta cng thc hin cc thao tc nhnhau.
Bit hm Ke, ta da vo cc thut ton ring cho mi trng hp vit phng ncho bi ton H Ni sc mu nh sau:
(*----------------------------------------Ha Noi sac maux: xanh - xuoi chieu kim dong hon: nau - nguoc chieu kim dong ho
t: trang - chuyen thangh: hong - chuyen tu do---------------------------------------*)
procedure Hnm(n: byte; a,b: byte);begin
if n = 0 then exit;if Ke(n,a,b) thenbegin
Hnm(n-1,a,6-a-b);inc(d);
writeln(f,d,'. ',a,' -> ',b);Hnm(n-1,6-a-b,b);
end elsebegin
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
55/60
Sng to trong Thut ton v Lptrnh Tp I 277
Hnm(n-1,a,b);inc(d);
writeln(f,d,'. ',a,' -> ',6-a-b);Hnm(n-1,b,a);
inc(d);writeln(f,d,'. ',6-a-b,' -> ',b);Hnm(n-1,a,b);
end;end;
(* Pascal *)
(**************************************HNM.PAS Thp H Nimux xanh: Xui chiu kim ng hn nu: Ngc chiu kim ng h
t Trng: thng theo hng ngangh H Ni c: kinh in****************************************)uses crt;var d: longint; {dem so buoc chuyen}f: text; {output file}s: string; {cau hinh thap}{----------------------------------------Kiem tra tinh chat ke giua 2 coc a va b-----------------------------------------}function Ke(n,a,b: byte): Boolean;
begincase s[n] of
'x': ke := (b = (a mod 3)+1);'n': ke := (a = (b mod 3)+1);'t': Ke := (abs(a-b) = 1);'h': Ke := True;
end {case};end;(*----------------------------------------
Ha Noi sac maux: xanh - xuoi chieu kim dong hon: nau - nguoc chieu kim dong ho
t: trang - chuyen thangh: hong - chuyen tu do---------------------------------------*)
procedure Hnm(n: byte; a,b: byte); t vit{-------------------------------To chuc goi thu tuc Hnm
------------------------------}procedure runHnm(Thap:string);begin
s := Thap;d := 0;assign(f,'hnm.out');rewrite(f);
writeln('-----------------');
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
56/60
Sng to trong Thut ton v Lptrnh Tp I 278
Hnm(length(s),1,2);writeln(f,'Total: ',d,' step(s)');close(f);readln;
end;BEGIN
runHnm('txhxn');END.
// C#
using System;namespace SangTao1{
/*------------------------------------
* Thap Ha Noi* -----------------------------------*/
class ThapHaNoi{
static int d = 0;static char[] s = new char[64];static void Main(){Console.WriteLine("\n Ha Noi Sac Mau");
RunHaNoiSacMau("xnxht", 1, 2);Console.WriteLine("\n Total: " +
d + " steps");Console.ReadLine();} // Mainstatic bool Ke(char KieuThap, int a, int b){
switch (KieuThap){case 'x': return (b == (a % 3) + 1);case 'n': return (a == (b % 3) + 1);case 't': return (Math.Abs(a - b) == 1);
}return true;
}/*-------------------------------------
Ha Noi sac maux: xanh - xuoi chieu kim dong hon: nau - nguoc chieu kim dong hot: trang - chuyen thangh: hong - chuyen tu do
---------------------------------------*/void HaNoiSacMau(int n, int a, int b){
if (n == 0) return;
if (Ke(s[n], a, b)){HaNoiSacMau(n - 1, a, 6 - a - b);
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
57/60
Sng to trong Thut ton v Lptrnh Tp I 279
Console.WriteLine((++d)+". ("+s[n]+") "+a+" -> "+b);HaNoiSacMau(n - 1, 6 - a - b, b);
}
else{
HaNoiSacMau(n - 1, a, b);Console.WriteLine((++d)+
". ("+s[n]+") "+a+" -> "+(6-a-b));
HaNoiSacMau(n - 1, b, a);Console.WriteLine((++d)+
". ("+s[n]+")"+(6-a-b) +" -> "+b);
HaNoiSacMau(n - 1, a, b);}
}static void RunHaNoiSacMau(string w,
int a, int b){
d = 0;w.CopyTo(0, s, 1, w.Length);HaNoiSacMau(w.Length, a, b);
}} // ThapHaNoi
} // SangTao1
Hng dn kim th
Ta s dng k thut i snh kim th cc trng hp.Ta chn v c nh cc gi tr n, a v b. Chng hn, n = 4, a = 1, b = 2.Khi ta c:
RunHn(n) v RunHnm('hhhh')cho cng kt qu.
RunHnx(n) v RunHnm('xxxx')cho cng kt qu.
RunHnn(n) v RunHnm('nnnn')cho cng kt qu.
RunHnt(n) v RunHnm('tttt')cho cng kt qu.
Nu ghi cc kt qu ny vo cc tp tng ng, sau gi th tc i snh tngcp hai tp tng ng th c th kim nh c mt s trng hp.
xy dng cc tnh hung kim th khc nhau cn li bn n cc tnh chtthun nghch ca cc th tc khc nhau. Th d, nh phn tch phn trn, cc ligi Hnx(3,1,2) v Hnn(3,3,1)pht sinh cng mt s ln chuyn.
Bn hy th pht hin thms tng ng gia cc li gi Hnmvi cc tham trkhc nhau.
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
58/60
Sng to trong Thut ton v Lptrnh Tp I 280
c thm
Lc s
Mt s bi ton v thp H Ni c a vo cc k thi Olympic Tin hcti mt s quc gia. Chng ta th tm hiu ci ngun ca cc bi ton thucloi ny.
Nm 1883, trn mt t bo Paris c ng bi m t mt tr chi ton hcca gio s Claus vi tn l Thp H Ni. Ni dung tr chi c mi ngisay m lm th chnh l bi ton Thp H Ni c.
Thi th Paris dn chng x nhau mua chi ny v sutngy ngi chuyn thp. Trong lch s v cc tr chi thng minh tng cnhng cn st nh vy. Tnh trung bnh mi th k c mt vi cn st tr chi.
Th k th XX c cn st Rubic, th k XIX l cc tr chi 15 v thp H Ni.Bi ton ny ni ting n mc tr thnh kinh in trong cc gio trnh v thutgii quy v c trnh by trong cc thng bo chnh thc ca cc phinbn chun ca cc ng trnh nh ALGOL-60, ALGOL-68, Pascal, Delphy, C,C++, Ada,... khi mun nhn mnh v kh nng quy ca cc ngn ng .
Theo nh nghin cu Henri De Parville cng b vo nm 1884 th tc gica tr chi thp H Ni c tn tht l nh ton hc Eduard Lucas, ngi cnhiu ng gp trong lnh vc s lun. Mi khi vit v ti gii tr th ng itn l Claus. Bn c rng Claus l mt hon v cc ch ci ca t Lucas.
De Parville cn k rng bi ton thp H Ni bt ngun t mt tch truynk n . Mt nhm cao tng n gio c giao trng trch chuyn dn64 a vng gia ba cc kim cng theo cc iu kin ni bi ton ThpH Ni c. Khi no hon tt cng vic, tc l khi chuyn xong to thp vng 64tng t v tr ban u sang v tr kt thc th cng l thi im tn th. S vicny c xy ra hay khng ta s xt bitp 8.10.
Li gii c cng b u tin cho bi ton thp H Ni l ca Allardice vFrase, nm 1884.
Nm 1994 David G. Poole i hc Trent, Canada vit mt bi khocu cho t Mathematics Magazine s thng 12 nhan "V cc thp v cctam gic ca gio s Claus" cng vi mt ph "Pascal bit H Ni". Poole lit k 65 cng trnh kho cu bi ton thp H Ni ng trn cc tp chton-tin trong khong mi nm. Tc gi cng ch ra s lin quan gia cccng thc tnh s ln chuyn cc tng thp v mt phng php quen bitdng tnh cc h s ca dng khai trin nh thc Newton (a + b)n. Phngphp ny c gi l Tam gic Pascal, mang tn nh ton hc kim vt l hcPhp Blaise Pascal (1623-1662), ngi ch to chic my tnh quay tay utin trn th gii.
Mt s nh nghin cu trong v ngoi nc c bn lun v a danhH Ni. Theo ti vn ny vn cn ng. Hu ht cc bi vit xoay quanh ti chuyn thp ni trn u dng thut ng bi ton thp H Ni. Khi gii thiuv bi ton H Ni nhiu thp Dudeney t tn l bi ton ca Reve (TheReve's Puzzle). Tuy nhin, nhiu nh nghin cu cho rng tt hn c l nnt tn v phn loi theo tn nguyn thu ca bi ton, ngha l Thp H Ni.
Ngoi cc dng Thp H Ni lit k phn trn mt s tc gi cn xut nhng dng kh k l, chng hn nh bi ton sau y.
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
59/60
Sng to trong Thut ton v Lptrnh Tp I 281
H Ni nhiu thp
Trong tr chi ny ngi ta lm thm nhng cc, chng hn thay v ba ta dng bncc v cng c th b tr thp ti nhiu cc. kin ny do H.E. Dudeney, mt tc gi
hng u v ton hc gii tr ngi Anh a ra vo nm 1908. c nhiu bi ng ligii cho bi ton ny, c nhng bi mi xut hin gn y vo nhng nm 1988 v1989. D vy cha ai chng minh c r rng s ln chuyn ca bi gii l ti thiunh lm vi cc dng thp H Ni khc.
Bi tpBn hy th lp cng thc tnh s ln chuyn cc tng ti thiu cho cc bi ton
sau:
Thp H Ni,Thp H Ni Xui,Thp H Ni Ngc v
Thp H Ni Thng.Li cm n Cc t liu trn v mt s t liu khc trong bi c trch dn t cc
bi vit ca gio s vin s Nguyn Xun Vinh, Khoa K thut khng gian, i hcMichigan, cng tc vin NASA, Hoa K. Tc gi xin chn thnh cm n gio s chophp trch dn v ch gio v cc phng php truyn th tri thc khoa hc cho gii tr.
NXH
8/4/2008
Sa ngy 4/4/09
8/2/2019 Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231
60/60
Sng to trong Thut ton v Lptrnh Tp I 282
Nguyn Xun Huysng to trong
thut ton
v lp trnh
vi C#, Pascal
tuyn cc bi ton tin nng cao
cho hc sinh v sinh vin gii
Tp mt
Li gii thiuSch trnh by c h thng cc ph-ng php thitk thut ton minh ha qua cc bi ton thi hcsinh gii v Olimpic hc sinh v sinh vin trongn-c, khu vc v quc t. Cc bi ton u -cphn tch y km theo thut ton v ton vnch-ng trnh vit trn ngn ng C# v Pascal.Sch l ti liu b ch cho hc sinh trung hc,
gio vin cc tr-ng ph thng v cao ng vsinh vin cc tr-ng i hc mun hon thin kinthc tham d cc k thi Olimpic Tin hc qucgia v quc t.Cc ch-ng trnh song ng Pascal v C# gip chobn c chuyn i nhanh chng sang cc mitr-ng lp trnh tin tin.