Задача: НА шахматной доске слон и ладья(белые). НАйти сколько на доске клеток, куда можно поставить черную пешку чтобы ее нельзя было срубить слоном или ладьей. Это я сделал.
Код
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;
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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.