Закраска прямой. На числовой прямой окрасили N отрезков. Известны координаты левого и правого концов каждого отрезка (Li и Ri). Найти длину
uses crt; const n = 4; type Line = record x, y: integer; end; var a: array[1..n] of line; c: line; i, j: integer; s, max: integer; fl: boolean;
begin clrscr; writeln('Vvedite otrezki ', n, ' shtuk: '); for i := 1 to n do readln(a[i].x, a[i].y);
{sortirovat' massiv} for i := 1 to n do {na plohoi vvod} if a[i].x > a[i].y then begin j := a[i].x; a[i].x := a[i].y; a[i].y := j; end;
for i := 1 to n - 1 do for j := i + 1 to n do if a[i].x > a[j].x then begin c := a[i]; a[i] := a[j]; a[j] := c; end;
{sama zadacha, proverka vhozhdenii} c := a[1]; s := 0; for i := 2 to n do begin if a[i].y >= c.y then begin if a[i].x > c.y then begin s := s + c.y - c.x; c := a[i]; end; if a[i].x <= c.y then c.y := a[i].y; end; end; s := s + c.y - c.x;
что бы понять решение не обязательно читать разбор, достаточно придумать тест, предусматривающий разнообразные возможности и "прогнать" его вручную))) например у меня 5 3 7 1 8 8 11 9 14 15 19 (советую нарисовать прямую и отметить каждый отрезок).