Задача: НА шахматной доске слон и ладья(белые). НАйти сколько на доске клеток, куда можно поставить черную пешку чтобы ее нельзя было срубить слоном или ладьей. Это я сделал.
Код
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 - буква ладьи и слона соответственно
В этом решении я не учел, что фигуры не могут прыгать друг через друга. Как это сделать?
Hindelberg
21.11.2005 23:18
Неужели ни у кого нету никаких предложений??
volvo
22.11.2005 0:56
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;
beginfor i := 1to n dofor j := 1to 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) dobegin
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) dobegin
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) dobegin
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) dobegin
arr[cs + (bs - i), i] := 1; inc(i);
end;
arr[cl, bl] := 3;
arr[cs, bs] := 2;
for i := 1to n dobeginfor j := 1to n do
write(arr[i, j]:2);
writeln
end;
writeln;
{
Здесь - подсчет нулевых полей ...
}end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.