Pages From Sang Tao Thuat Toan Va Lap Trinh 1-8-6231

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.