bài tóan tin trò chơi nim

15 223 1
bài tóan tin trò chơi nim

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

HĂm GRUNDY HĂm Grundy lĂ 1 Ônh xƠ tú tp ểnh X cớa 1 ỏ thệ G vĂo tp sọ nguyận khng m g : X > Z + x X > g(x); ng vời mói ểnh x lĂ 1 sọ nguyận khng m g(x) sao cho g(x) lĂ sọ nguyận khng m nh nht khng thuồc tp hởp tt c cÔc sọ nguyận khng m tũổng ửng vời cÔc ểnh y mĂ x i tời . ệnh nghễa nhn cớa ỏ thệ : Nẽu ỏ thệ G cĩ HĂm Grundy G(x) thề nhn S cớa ỏ thệ lĂ tp hởp nhừng ểnh mĂ giÔ trệ hĂm Grundy tƠi ĩ bêng 0 ệnh lế : ỏ thệ hừu hƠn khng cĩ mƠch vời ồ dĂi lầ thề cĩ nhn Trỉ chổi loƠi thng tin hừu hƠn , y ớ, ọi khÔng : LĂ trỉ chổi 2 ngũỗi thay nhau ln lũởt i vĂ tha mÊn nhừng ièu kiẹn sau : + Mòi thng tin cớa 1 thẽ chổi lĂ hoĂn toĂn ũởc xÔc ệnh y ớ ( gòi lĂ 1 trƠng thÔi chổi - hay lĂ 1 thẽ chổi ) + Cĩ trƠng thÔi ban u vĂ trƠng thÔi kẽt thùc . TrƠng thÔi kẽt thùc lĂ trƠng thÔi khng th biẽn õi tiẽp thĂnh trƠng thÔi khÔc ũởc nừa . + XÔc ệnh ũởc phẫp biẽn õi tú thẽ chổi nĂy sang thẽ chổi khÔc vĂ sau mồt sọ hừu hƠn phẫp biẽn õi thề dn tời trƠng thÔi kẽt thùc Nhừng trỉ chổi nhũ thẽ thề tỏn tƠi 1 thut toÔn ngũỗi chổi i trũờc ( hoằc sau) giĂnh hỉa hoằc thng Cĩ th chuyn trỉ chổi thĂnh 1 ỏ thệ G(X,F) ố y X lĂ tp ểnh - Mói ểnh lĂ 1 thẽ chổi - cỉn F lĂ phẫp biẽn õi cÔc thẽ chổi . Cĩ ểnh khối u lĂ trƠng thÔi chổi ban u . Trỉ chổi ũởc bt u bêng rùt thâm sau ĩ tiẽn hĂnh theo phẫp biẽn õi F thề cĩ nhièu kh nâng thng . TrƠng thÔi chổi kẽt thùc ửng vời ểnh kẽt thùc ,lĂ ểnh khng th thức hiẹn F i tời ểnh khÔc ũởc nừa . u thớ nĂo giĂnh ũởc ểnh kẽt thùc thề thng cuồc . Chù ỹ : GiÔ trệ HĂm Grundy tƠi ểnh kẽt thùc thề bêng 0 . Nhn cớa ỏ thệ lun chửa ểnh kẽt thùc . Mồt sọ bĂi tp 1 / Trỉ chổi Nim vời 3 ọng si : Cho 3 ọng si N1,N2,N3 . Hai ngũỗi ln lũởt i , mói ln i ũởc bọc ố 1 ọng bt kề trong 3 ọng vời sọ si tỡy ỹ k tú 1 viận tời hẽt ọng . Lp trềnh trỉ chổi sao cho kh nâng thng cớa mÔy lĂ nhièu nht 2 / Cho 1 miẽng So-co-la ũởc chia thĂnh MxN vung bêng N-1 ũỗng ngang vĂ M-1 ũỗng dòc song song vời cÔc cƠnh . Trận mồt vung cớa miẽng so-co-la cĩ Ônh du hềnh con mÊ . Hai ngũỗi chổi 1 trỉ chổi nhũ sau : Ln lũởt bầ miẽng so-co-la theo 1 rÊnh ngang hoằc dòc vĂ ũa phn cĩ Ônh du cho ngũỗi kia . Ai khng cĩ kh nâng bầ ũởc nừa thề thua . Lp trềnh trỉ chổi sao cho kh nâng thng cớa mÔy lĂ nhièu nht Vế dủ : N=9;M=7, vệ trế Ônh du con mÊ lĂ (7,2) 3 / Cho 2 ọng si vời sọ si ố mói ọng lĂ N1,N2 viận. Hai ngũỗi ln lũởt cĩ th bọc si theo qui lut : Bọc ố 1 ọng si sọ si tỡy ỹ tú 1 vận cho ẽn hẽt ọng ; hoằc bọc ố c 2 ọng vời sọ si bêng nhau . Ai bọc ũởc viận cuọi cỡng lĂ thng cuồc Lp trềnh trỉ chổi sao cho kh nâng thng cớa mÔy lĂ nhièu nht 4/ è thi Quọc gia 1993-1994 Cho 1 bÂng gỏm N , Ônh sọ tú 1 ẽn N theo chièu tú trÔi qua phÂi . Hai u thớ lun phiận , ẽn lũởt mềnh cĩ th chòn 1 hoƠc 2 lièn nhau chũa Ônh du vĂ sau ĩ Ônh du cÔc Ê chòn . Ngũỗi nĂo ẽn lũởt mềnh mĂ khng chòn ũởc cÔc chũa Ônh du thề coi nhũ thua cuồc . TrƠng thÔi ban u lĂ cÔc èu chũa Ônh du . Yậu cu : HÊy m phng trỉ chổi : ngũỗi chổi vời mÔy sao cho kh nâng thng cớa mÔy lĂ nhièu nht . CÔch tõ chửc mĂn hềnh cn cho phẫp : a ) Nhp N tú bĂn phếm b ) Hi ngũỗi chổi chòn i trũờc hay i sau c ) Lp lƠi cÔc thao tÔc sau y cho ẽn khi kẽt thùc : + Nẽu ẽn lũởt mÔy i thề thng bÔo mÔy chòn cÔc nĂo , sau ĩ hin thệ trƠng thÔi mời cớa bâng + Nẽu ẽn lũởt ngũỗi i thề cho phẫp ngũỗi chổi chòn cÔc mềnh thếch , sau ĩ hin thệ trƠng thÔi mời cớa bâng Khi trỉ chổi kẽt thùc cn thng bÔo ngũỗi chổi thua hay thng . Gởi ỹ BĂi 1 : Mói trƠng thÔi chổi ằ trũng bối G(x)= N1 xor N2 xor N3 Nẽu ẽn lũởt mềnh i mĂ G(x) <> 0 thề bọc ố ọng N i sọ si sao cho ọng nĂy cỉn lƠi sọ si lĂ N k xor N h ( k,h <> i ) khi ĩ sau khi bọc thề trƠng thÔi chổi sẩ lĂ G(x * ) = 0 ( Tứ suy ) . Trong trũỗng hởp ẽn lũởt mềnh i mĂ G(x) = 0 thề Ănh bọc vu vổ 1 viận kẫo dĂi tềnh trƠng chỗ dệp may u thớ i hổi kẫm ci dn ẽn cho mềnh trƠng thÔi G(x) <> 0 Nẽu trƠng thÔi ban u lĂ G(x) <> 0 thề ngũỗi i trũờc lun thng ! BĂi 2 : Tũổng tứ bĂi 1 , nhũng vời 4 ọng si . BĂi 3 : Cĩ th xy dứng hĂm Grundy bêng phũổng phÔp Lỡa bỉ vè chuỏng tềm sọ nguyận khng m nh nht khng thuồc tp hởp sọ nguyận khng m cho trũờc . Program GRUNDY; Uses crt; Const max = 100; Type Ta = Array[0 max,0 max] of Byte; Tb = Array[0 max*max] of Boolean; Var a : Ta; n,m : Integer; Procedure Nhap; Begin Repeat Clrscr; Write(Cho biet gia tri 2 dong soi 1 , 2 =); {$i-} Readln(n,m); {$i+} Until (Ioresult=0) and (N>0) and (m>0) and (n<=max) and (m<=max); End; Procedure TAOHAMGRUNDY(n:Integer); Var i,j : Integer; Function Gan(i,j:Integer):Integer; Var b : Tb; k,min : Integer; Begin For k:=0 to i+j+min+1 do b[k]:=True; For k:=0 to i-1 do b[a[k,j]]:=False; For k:=j-1 downto 0 do b[a[i,k]]:=False; For k:=1 to min do b[a[i-k,j-k]]:=False; For k:=0 to i+j+min+1 do If b[k] then Begin gan:=k; Exit; End; End; Begin For i:=0 to n do For j:=i to n do Begin a[i,j]:=gan(i,j); a[j,i]:=a[i,j]; End; End; BEGIN Nhap; If m>n then Taohamgrundy(m) Else Taohamgrundy(n); END. V¡i chòæng trÒnh mÂu : Chòæng trÒnh 1 ( D¥ng tâng qu¤t cía b¡i to¤n N Åäng sÚi ) Uses Crt; Const Max = 20; Type Ta = Array[1 max] of Byte; Var n,j,i : Integer; a : Ta; x : Byte; Ch : Char; Ok : Boolean; Procedure Truocsau; Begin Gotoxy(20,20); Write(‘Ban boc truoc [T] hay sau [S] ? ‘); Repeat Ch:=Upcase(Readkey); Until (ch in [’T’,’S’]); End; Procedure Nhap; Begin Repeat Clrscr; Write(‘Cho biet n:=’); {$i-} Readln(n); {$i+} Until (ioresult=0) and (n>=3) and (n<=max); For i:=1 to n do Repeat Gotoxy(1,i+1); Write(‘A[’,i:4,’]=’); {$i-} Readln(a[i]); {$i+} Until (ioresult=0) and (a[i]>0); Truocsau; Clrscr; Gotoxy(1,2);Write(‘Q=’); Gotoxy(1,3);Write(‘VT’); For i:=1 to n do Begin Gotoxy(i*4-3,2); Write(a[i]:4); Gotoxy(i*4-3,2); Write(i:4); End; End; Function TIMGRUNDY:Byte; Var x : Byte; Begin x:=a[1]; For i:=2 to n do x:=x xor a[i]; Timx:=x; End; Procedure Hien(soquan,Vitri:Byte); Var i:Byte; Begin Gotoxy(vitri*4-3,2); Textcolor(12+16); Write(a[vitri]:4); Sound(200); Delay(300); Nosound; Dec(a[vitri],soquan); Gotoxy(vitri*4-3,2); Textcolor(7); Write(a[vitri]:4); End; Procedure Lay1(Var soquan,vitri:Byte); Begin For i:=1 to n do If (a[i]>0) then Begin soquan:=1; vitri:=i; Exit; End; End; Procedure Lay2(Var soquan,vitri:Byte); Begin For i:=1 to n do If ((x XOR a[i]) < a[i]) then Begin vitri := i; soquan := a[i]-(x xor a[i]); Exit; End; End; Procedure Maydi; Var soquan,vitri:Byte; Begin x:=timGRUNDY; If x=0 then lay1(soquan,vitri) Else Lay2(soquan,vitri); Textcolor(12+16); Gotoxy(30,14); Write(‘ MAY BOC ‘); Textcolor(7); Gotoxy(20,15); Write(‘May boc dong so ? :=’,vitri); Gotoxy(20,16); Write(‘va so quan boc ? :=’,soquan); Hien(soquan,vitri); Delay(1000); Gotoxy(30,14); Write(‘ MAY BOC ‘); End; Procedure Bandi; Var soquan,vitri:Byte; Begin Textcolor(12+16); Gotoxy(30,21); Write(‘ MOI BAN BOC ‘); Textcolor(7); Repeat Gotoxy(20,22); Write(‘Ban boc dong so ? :=’); {$i-} Readln(vitri); {$i+} Until (Ioresult=0) and (vitri>0) and (vitri<=n) and (a[vitri]>0); Repeat Gotoxy(20,23); Write(‘va so quan boc ? :=’); {$i-} Readln(soquan); {$i+} Until (Ioresult=0) and (soquan>0) and (soquan<=a[vitri]); Hien(soquan,vitri); Gotoxy(30,21); Write(‘ MOI BAN BOC ‘); End; Function Kiemtraketthuc:Boolean; Var i:Byte; Begin Kiemtraketthuc:=False; For i:=1 to n do If a[i]<>0 then Exit; Kiemtraketthuc:=True; End; Procedure Play; Begin If ch=’T’ then Bandi; Ok:=True; While not kiemtraketthuc do Begin Ok:=True; Maydi; If kiemtraketthuc then Exit; Ok:=False; Bandi; End; End; BEGIN Repeat Nhap; Play; Gotoxy(20,10); If ok Then Write(‘Ban da that bai’) Else Write(‘Ban rat thong minh va ban da chien thang’); Gotoxy(20,25); Write(‘Esc de thoat ‘); Until (readkey=#27); END. Chòæng trÒnh mÂu 2 : Uses crt; Const max = 40; Type Ta = Array[0 max+1] of integer; Var b : ta; a : Array[0 max] of Record dodai,vt: integer; End; n,m : Integer; Pa : Ta; ok : Boolean; ch : Char; Procedure Nhap; Begin Repeat Clrscr; Write('Cho biet do dai N:='); {$i-} Readln(n); {$i+} Until (ioresult=0) and (N>0) and (N<=max); Gotoxy(1,2); Write('Ban boc truoc [T] hay sau [S] '); Textcolor(15+16); Write('? '); Textcolor(15); Repeat Ch:=Upcase(readkey); Until (ch in ['T','S']); End; Procedure Khoitaobandau; Var i:integer; Begin m:=1; a[m].dodai:=n; Gotoxy(1,5); For i:=1 to n do Begin B[i]:=0; Write(' Û'); End; b[0]:=1; b[n+1]:=1; End; Procedure Hien1(ch:char; i:integer;Mau:Byte); Begin Textcolor(Mau); Gotoxy(i*2-1,5); Write(' Û'); Case ch of '2' : Begin Gotoxy((i+1)*2-1,5); Write(' Û'); End; '0' : Begin Gotoxy((i-1)*2-1,5); Write(' Û'); End; End; End; Procedure Hien(ch:char; i:Byte); Begin Hien1(ch,i,12+16); Delay(1000); Hien1(ch,i,12); End; Function Di(var ch:Char):integer; Var i:integer; Procedure Hien; Begin If b[i]=0 then Textcolor(15) Else Textcolor(7); Gotoxy(1,18); Write(' Chi danh o hien tai 1 '); If (b[i+1]=0) and (b[i]=0) then Textcolor(15) Else Textcolor(7); Gotoxy(1,19); Write(' Danh dau o hien tai va o ben phai 2 '); If (b[i-1]=0) and (b[i]=0) then Textcolor(15) Else Textcolor(7); Gotoxy(1,20); Write(' Danh dau o hien tai va o ben trai 0 '); Gotoxy(10,17); If b[i]=0 then Textcolor(15) Else Textcolor(7); Write('Vi tri hien tai ',i:4); End; Function Kiemtra(ch:Char):Boolean; Begin [...]... bandi; Ok:=not ok; End; End; BEGIN Textbackground(1); Randomize; Repeat Textcolor(15); Nhap; Khoitaobandau; Taoa; Taophuongan; choi; Thongbao; Gotoxy(20,25); Write('ESC to quit or press any key to continue Until Readkey=#27; END

Ngày đăng: 07/09/2014, 07:12

Từ khóa liên quan

Mục lục

  • Procedure Play;

  • Begin

    • BEGIN

      • Repeat

Tài liệu cùng người dùng

Tài liệu liên quan