Инф олимпиада doc



бет61/66
Дата08.02.2022
өлшемі91,93 Kb.
#123795
1   ...   58   59   60   61   62   63   64   65   66
Байланысты:
1544775476 (1)

Шығу файылының форматы: шығу файылында тек бірғана сан королдің көрсетілген торкөзге жету үшін жасауы керек ең аз қадам саны жазылған.
Кіру файлы: Korol.in
……..
……..
……..
..K….
……..
….P..
…..P.
H1
Шығу файлы: Korol.out
Есептің алгоритмі: Есепті шығаруда ең алдымен шахмат жазуы танитындай екі өлшемді кесте жасаймыз. Одан кейін екі өлшемді қосымша сандық кесте аламыз. Осы кестеде корольдің тұрған орнын «2» деп, пешкалардың шабуылдайтын торкөздерін «1» деп белгілеп аламыз.
Король есептің шарты бойынша үш бағытқа жүреді:
I,j I,j+1

I+1,j i+1,j+1


Бұл есеп «бұтақ (дерево)» әдісіне келеді. Королмен осы үш бағыттағы әрбір торкозге жүріп көреміз. Осы үш торкөздің әрбірінен тағы үш торкөзге жүруге болады және тағыда сол сияқты. Әрбір торкөзге жасалынған қадам санын жазып отырамыз. Король көрсетілген торкөзге жеткенде сол торкөздегі сан, ең аз қадам санын береді.


Шешімі:
Program KOROL;
Uses crt;
Const
Y: array[1..8] of string=(‘A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’);
Label 1;
Var I,j,k,t,f,r,l,p: 0..16;
B: array[1..8,1..8] of string [2];
C: array[1..8] of string [8];
A: array[1..8,1..8] of 0..16;
Q: string;
Procedure juru;
Begin
If(i+1<=8) and (a[i+2,j]=0) then if (f=i+1) and (r=j)
Then t:=1
Else
Begin
A[i+1,j]:=i+1;k:=1;
End
If(j+1<=8) and (a[I,j+1]=0) then if(f=i) and (r=j+1) then t:=1 else begin
A[I,j+1]:=i+1; k:=1; end;
If(j+1<=8) and (,j+1<=8) and (a[i+1,j+1]=0) then if(f=i+1) and (r=j+1) then t:=1 else begin
A[i+j+1]:=i+1; k:=1; end; end;
Procedure aqw;
Begin
If(i-1>=1) and (j-1>=1) then a[i-1,j-1]:=1;
If(i-1>=1) and (j+1<=8) then a[i-1,j+1]:=1;
A[I,j]:=0;
End; begin clrscr; p:=9; for i:=1 to 8 do
Begin p:=p-1;
For j:=1 to 8 do
Begin
Str(p,q); b[I,j]:=y[j]+q;
End; end; assign() input, ‘korol.in’);
Reset(input);
assign() output, ‘korol.out’);
rewrite(output);
for i:=1 to 8 do
readln(c[i]); close(input);
for i:-1 to 8 do
for j:=1 to 8 do
begin
if b[I,j]=q then begin f:=I; r:=j; end;
if copy(c[i],j,1)= “K” then begin a[I,j]:=2; l:=I; t:=j: end;
if copy(c[i],j,l)=”P” then a[I,j]:=1;
end; if not((1<=f) and (t<=r)) then begin writeln(“no solution”); exit; end;
if(l=f) and (t=r) then begin writeln(0); exit; end;
for i:=1 to 8 do
for j:=1 to 8 do
if a[I,j]=1 then aqw;
t:=0; l:=2; for i:=1 to 8 do
for j:=1 to 8 do
if a[I,j]=1 then juru; inc(l);
if t=1 then begin writeln(1-2); halt; end;
if k<>0 then goto 1;
writeln(“no solution”);
close(output); end.



  1. Меретой. Ғасыр мерейтойы деп атақты адамдардың туылған күнінен бастап 100 немесе 200 жыл өтуін айтамыз. Қалада атақты бір ақынның ғасырлық мерейтойын тойламақшы. Осыған орай ұйымдастырушылар қала орталығында үлкен табло іліп қоюды дұрыс деп тапты. Бұл таблоның қызметі мерейтойға дейін неше күн қалғаны көрсету.

Тапсырма: осы таблоның жұмыс істеуін қамтамасыз ететін, ақынның туылған күні мен ағымдағы мерзімге қарап мерейтойға неше күн қалғанын анықтайтын программа жазу керек.


Достарыңызбен бөлісу:
1   ...   58   59   60   61   62   63   64   65   66




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет