с информатикой. Нужно в тетрадке составить блок-схему к задаче : "Исполнитель рисует прямоугольники , которые размещены один возле другого, если стороны первого из них равны а и b,а стороны каждого следующего на 5 шагов больше за стороны предыдущего, пока площадь прямоугольника будет не больше за 2000.
Сначала программа, показывающая период=))
Var
N:uint64;
B:BigInteger:=1;
Begin
Write('N = ');ReadLn(N);
For var i:= 1 to N do
Begin
if (i mod 10 <> 5)and(i mod 10 <> 0) then B:=B*i
else if i mod 10 = 5 then B:=B div 2;
Write(B mod 10);
if i mod 40 = 0 then WriteLn;
End;
End.
N = 1000
1264224288868266264448468868222428448466
6264224288868266264448468868222428448466
6264224288868266264448468868222428448466
6264224288868266264448468868222428448466
6264224288868266264448468868222428448466
6264224288868266264448468868222428448466
6264224288868266264448468868222428448466
6264224288868266264448468868222428448466
6264224288868266264448468868222428448466
6264224288868266264448468868222428448466
6264224288868266264448468868222428448466
6264224288868266264448468868222428448466
6264224288868266264448468868222428448466
6264224288868266264448468868222428448466
...
Ну и так далее.
Искомая программа:
Const
T = '6626422428886826626444846886822242844846';
Var
S:BigInteger;
Begin
S:=ReadString.ToBigInteger;
if S > 1 then WriteLn(T[(S mod 40).ToString.ToInteger+1])
else WriteLn(1)
End.
// Внимание! Если программа не работает, обновите версию!
type
tField=(char,integer);
function GetNewField(oldfld:tField;x,y:integer;var newfld:tField):boolean;
begin
Result:=true;
var xo:=oldfld[0];
case xo.ToLower of
'a':
case x of
-2,-1:Result:=false;
1:newfld:=(Succ(xo),0);
2:newfld:=(Succ(Succ(xo)),0)
end;
'b':
case x of
-2:Result:=false;
-1:newfld:=(Pred(xo),0);
1:newfld:=(Succ(xo),0);
2:newfld:=(Succ(Succ(xo)),0)
end;
'g':
case x of
-2:newfld:=(Pred(Pred(xo)),0);
-1:newfld:=(Pred(xo),0);
1:newfld:=(Succ(xo),0);
2:Result:=false
end;
'h':
case x of
-2:newfld:=(Pred(Pred(xo)),0);
-1:newfld:=(Pred(xo),0);
1,2:Result:=false
end;
else
case x of
-2:newfld:=(Pred(Pred(xo)),0);
-1:newfld:=(Pred(xo),0);
1:newfld:=(Succ(xo),0);
2:newfld:=(Succ(Succ(xo)),0)
end
end;
if Result=true then begin
var yo:=oldfld[1];
case yo of
1:
case y of
-2,-1:Result:=false;
else newfld:=(newfld[0],yo+y);
end;
2:
case y of
-2:Result:=false;
else newfld:=(newfld[0],yo+y);
end;
7:
case y of
-2,-1,1:newfld:=(newfld[0],yo+y);
2:Result:=false
end;
8:
case y of
-2,-1:newfld:=(newfld[0],yo+y);
1,2:Result:=false
end
else
newfld:=(newfld[0],yo+y);
end
end
end;
begin
var ax:=Arr(-2,-1,1,2);
var ay:=ax;
var s:=ReadlnString('Укажите клетку, на которой стоит конь');
var f1,f2:tField;
f1:=(s[1],s[2].ToDigit);
foreach var x in ax do
foreach var y in ay do
if abs(x)+abs(y)=3 then
if GetNewField(f1,x,y,f2) then Print(f2[0]+f2[1]);
Writeln
end.
Примеры
Укажите клетку, на которой стоит конь b1
a3 c3 d2
Укажите клетку, на которой стоит конь C5
A4 A6 B3 B7 D3 D7 E4 E6