Помощь - Поиск - Пользователи - Календарь
Полная версия: Шахматная задача
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Hindelberg
Задача: НА шахматной доске слон и ладья(белые). НАйти сколько на доске клеток, куда можно поставить черную пешку чтобы ее нельзя было срубить слоном или ладьей. Это я сделал.

Код

if (i+j=cs+bs) or (i-j=cs-bs) then
mas[i,j]:=1;
end;
mas[cs,bs]:=2;
for i:=1 to n do
for j:=1 to n do
begin
if (i=cl) or (j=bl) then
mas[i,j]:=1;
end;
mas[cl,bl]:=3;
for i:=n downto 3 do
for j:=1 to n do
if mas[i,j]=0 then s:=s+1;


cl, cs - цифра ладьи и слона соответственно
bl, bs - буква ладьи и слона соответственно

В этом решении я не учел, что фигуры не могут прыгать друг через друга.
Как это сделать? rolleyes.gif
Hindelberg
Неужели ни у кого нету никаких предложений??
volvo
To: Hindelberg
Я понимаю ,это выглядит ужасно, но я бы сразу делал проверку бьющихся полей с учетом того, закрывается ли одна фигура другой:
const
n = 8;
var
arr: array[1 .. n, 1 .. n] of integer;

var
i, j: integer;
const
cs = 2; bs = 2;
bl = 2; cl = 5;

begin
for i := 1 to n do
for j := 1 to n do
arr[i, j] := 0;

arr[cl, bl] := 0;
arr[cs, bs] := 2;

j := pred(bl);
while (j > 1) and (arr[cl, j] < 2) do dec(j);
while (j < 9) and (arr[cl, j] < 2) do begin
arr[cl, j] := 1; inc(j);
end;

i := pred(cl);
while (i > 0) and (arr[i, bl] < 2) do dec(i);
inc(i);
while (i < 9) and (arr[i, bl] < 2) do begin
arr[i, bl] := 1; inc(i);
end;

arr[cl, bl] := 3;
arr[cs, bs] := 0;

i := bs;
while (i > 0) and (cs - (bs-i) > 0) and (arr[cs - (bs - i), i] < 2) do dec(i);
inc(i);
while (i < 9) and (cs - (bs-i) < 9) and (arr[cs - (bs - i), i] < 2) do begin
arr[cs - (bs - i), i] := 1; inc(i);
end;

i := bs;
while (i > 0) and (cs + (bs-i) in [1 .. 8]) and (arr[cs + (bs - i), i] < 2) do dec(i);
inc(i);
while (i < 9) and (cs + (bs-i) < 9) and (arr[cs + (bs - i), i] < 2) do begin
arr[cs + (bs - i), i] := 1; inc(i);
end;

arr[cl, bl] := 3;
arr[cs, bs] := 2;

for i := 1 to n do begin
for j := 1 to n do
write(arr[i, j]:2);
writeln
end;
writeln;

{
Здесь - подсчет нулевых полей ...
}
end.
wacko.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.