Все приведённые ниже коды написаны и отлажены в среде PascalABC.NET 3.2. сборка 1439(10.05.2017).
Сначала программа, показывающая период=))
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.
// PascalABC.NET 3.2, сборка 1437 от 03.05.2017 // Внимание! Если программа не работает, обновите версию!
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
program Speed;
uses crt,graph;
Var gd,gm:integer;
begin
clrscr;
detectgraph (gd,gm);
initgraph (gd,gm,'tp\7');
{koleca}
circle (180,330,30);
circle (180,330,40);
circle (450,330,30);
circle (450,330,40);
Line (140,340,60,340);
Line (220,340,412,340);
Line (490,340,520,340);
Line (520,340,520,270);
Line (520,270,390,270);
Line (390,270,360,180);
Line (360,180,210,180);
Line (210,180,150,270);
Line (150,270,60,270);
Line (60,270,60,340);
Readln
end.
вставь в паскаль и проверь)