{ Если что, часть программы не нужна для построения цепочки. Она просто иллюстрирует, что полученный результат верен. }
var sq : array[0..999] of array[0..9] of boolean; co : array[0..999] of integer; ar : array[1..10003] of 0..9; i,j: integer; x: integer; t : boolean; begin for i := 0 to 999 do begin for j := 0 to 9 do sq[i][j] := false; co[i] := 0; end; for i := 1 to 3 do ar[i] := 0; i := 3; t := true; {write('000');} while t do begin i := i + 1; x := ar[i-3]*100 + ar[i-2]*10 + ar[i-1]; if co[x] >= 10 then t := false else begin j := 1; while sq[x][j] do j := (j + 1) mod 10; ar[i] := j; sq[x][j] := true; co[x] := co[x] + 1; {write(j)} end; end; {writeln;} writeln('Length: ',i - 1);
{просто чтобы убедиться} for i := 0 to 999 do for j := 0 to 9 do sq[i][j] := false;
t := true; j := 0; i := 1; while (i <= 10000) and t do begin x := ar[i] * 100 + ar[i+1] * 10 + ar[i+2]; if sq[x][ar[i+3]] then t := false else begin sq[x][ar[i+3]] := true; j := j + 1; end; i := i + 1 end; if t and (j = 10000) then write('Confirmed') end.
// PascalABC.NET 3.0, сборка 1144 от 16.01.2016 type Point=record x,y:real end;
function GetPoint(c:char):Point; begin Writeln('Введите координаты точки ',c,':'); Read(Result.x,Result.y) end;
function Line(A,B:Point):real; begin Result:=sqrt(sqr(B.x-A.x)+sqr(B.y-A.y)) end;
function SqTriangle(pA,pB,pC:Point):real; begin var a:=Line(pB,pC); var b:=Line(pA,pC); var c:=Line(pA,pB); if (a+b>c) and (a+c>b) and (b+c>a) then begin var p:=(a+b+c)/2; Result:=sqrt(p*(p-a)*(p-b)*(p-c)) end else Result:=0 end;
begin var A:=GetPoint('A'); var B:=GetPoint('B'); var C:=GetPoint('C'); Writeln('Площадь треугольника равна ',SqTriangle(A,B,C)) end.
Тестовое решение: Введите координаты точки A: -5 3.18 Введите координаты точки B: 1.45 6.2 Введите координаты точки C: 6 -5.93 Площадь треугольника равна 45.98975
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota
Оформи подписку