program p181210; const N = 5; var JeObsazenyRadek: array[1..N] of boolean; JeObsazenaDiagonalaSoucet: array[2..2*N] of boolean; JeObsazenaDiagonalaRozdil: array[1-N..N-1] of boolean; YKdeJeDamaX: array[1..N] of integer; procedure Vytiskni; var x,y: integer; begin for y:=1 to N do begin for x:=1 to N do if YKdeJeDamaX[x]=y then write(' D' ) else write(' .' ); writeln end; readln end; procedure UmistiDamu( x: integer ); var y: integer; begin if x > N then Vytiskni else for y:=1 to N do if not JeObsazenyRadek[y] then if not JeObsazenaDiagonalaSoucet[x+y] then if not JeObsazenaDiagonalaRozdil[x-y] then begin YKdeJeDamaX[x] := y; JeObsazenyRadek[y] := TRUE; JeObsazenaDiagonalaSoucet[x+y] := TRUE; JeObsazenaDiagonalaRozdil[x-y] := TRUE; UmistiDamu(x+1); JeObsazenyRadek[y] := FALSE; JeObsazenaDiagonalaSoucet[x+y] := FALSE; JeObsazenaDiagonalaRozdil[x-y] := FALSE; end; end; begin UmistiDamu(1); readln end. const N = 5; var S: array[1..N,1..N] of integer; { 0... zadne ohrozeni ... } const dx: array[1..8] of integer = ( 0, +1, +1, +1, 0, -1, -1, -1 ); dy: array[1..8] of integer = ( -1, -1, 0, +1, +1, +1, 0, -1 ); procedure Vytiskni; var x,y: integer; begin for y:=1 to N do begin for x:=1 to N do if S[x,y] >= 1000 then write(' D' ) else write(' .' ); writeln end; readln end; procedure PridejDalsiDamu( d: integer ); var x,y, xx,yy,i, smer: integer; begin if d=N then Vytiskni else begin x:=d+1; for y:=1 to N do if S[x,y]=0 then { umistit damu na x,y: } begin S[x,y] := 1000; for smer := 1 to 8 do for i:=1 to N-1 do begin xx := x+i*dx[smer]; yy := y+i*dy[smer]; if (xx<=0) or (xx>N) or (yy<=0) or (yy>N) then break; //write( xx,' ',yy,' ' ); Inc( S[xx,yy] ); end; PridejDalsiDamu(d+1); S[x,y] := 0; for smer := 1 to 8 do for i:=1 to N-1 do begin xx := x+i*dx[smer]; yy := y+i*dy[smer]; if (xx<=0) or (xx>N) or (yy<=0) or (yy>N) then break; Dec( S[xx,yy] ); end; end; end; end; var x,y: integer; begin for y:=1 to N do for x:=1 to N do S[x,y] := 0; PridejDalsiDamu(0); readln; readln end. const P: array[1..10] of integer = (5, 8, 1, 17, 90, 49, 60, 128, 15, 19 ); function OKolikMuzuVyhrat(zac,kon: integer): integer; var a,b: integer; begin if zac>kon then OKOlikMuzuVyhrat := 0 else begin a := P[zac] - OKolikMuzuVyhrat( zac+1, kon ); b := P[kon] - OKOlikMuzuVyhrat( zac, kon-1 ); if a>b then OKOlikMuzuVyhrat := a else OKOlikMuzuVyhrat := b end end; begin write( OKOlikMuzuVyhrat(1,10) ); readln; readln end. function OKolikVyhrajePrvniHrac( zac, kon, Prvni, Druhy: integer; JeNaTahuPrvni: boolean ): integer; var a,b: integer; begin if zac > kon then OKolikVyhrajePrvniHrac := Prvni-Druhy else if JeNaTahuPrvni then begin a := OKolikVyhrajePrvniHrac( zac+1, kon, Prvni+P[zac], Druhy, FALSE ); b := OKolikVyhrajePrvniHrac( zac, kon-1, Prvni+P[kon], Druhy, FALSE ); if a > b then OKolikVyhrajePrvniHrac := a else OKolikVyhrajePrvniHrac := b end else begin a := OKolikVyhrajePrvniHrac( zac+1, kon, Prvni, Druhy+P[zac], TRUE ); b := OKolikVyhrajePrvniHrac( zac, kon-1, Prvni, Druhy+P[kon], TRUE ); if a < b then OKolikVyhrajePrvniHrac := a else OKolikVyhrajePrvniHrac := b end end; begin write( OKolikVyhrajePrvniHrac(1,10, 0,0, TRUE ) ); readln; readln end. function JeProhravajici( a,b,c,d, hloubka: integer ): boolean; var i: integer; begin if (a=0) and (b=0) and (c=0) and (d=0) then JeProhravajici := TRUE else begin for i:=1 to a do if JeProhravajici( a-i, b, c, d, hloubka+1 ) then begin if hloubka=1 then writeln( a-i:3, b:3, c:3, d:3 ); JeProhravajici := FALSE; exit end; for i:=1 to b do if JeProhravajici( a, b-i, c, d, hloubka+1 ) then begin if hloubka=1 then writeln( a:3, b-i:3, c:3, d:3 ); JeProhravajici := FALSE; exit end; for i:=1 to c do if JeProhravajici( a, b, c-i, d, hloubka+1 ) then begin if hloubka=1 then writeln( a:3, b:3, c-i:3, d:3 ); JeProhravajici := FALSE; exit end; for i:=1 to d do if JeProhravajici( a, b, c, d-i, hloubka+1 ) then begin if hloubka=1 then writeln( a:3, b:3, c:3, d-i:3 ); JeProhravajici := FALSE; exit end; JeProhravajici := TRUE end; end; begin writeln( JeProhravajici( 7,5,1,1, 1 ) ); readln; readln end. function JeProhravajici( k: integer ): boolean; begin if k=0 then JeProhravajici := TRUE else if ((k>=1) and (JeProhravajici(k-1))) or ((k>=2) and (JeProhravajici(k-2))) or ((k>=4) and (JeProhravajici(k-4))) or ((k>=12) and (JeProhravajici(k-12))) then JeProhravajici := FALSE else JeProhravajici := TRUE end; var i: integer; begin for i:=0 to 200 do writeln( i:3,': ', JeProhravajici( i ) ); readln; readln; end.