районные олимпиады по программированию.Решение и разбор задач.

var
n:byte;
a:array[1..255,1..2] of integer;
mas:array[1..255] of integer;
i,j:byte;
m,s:integer;


procedure bom(a1,a2,a3:real);
begin
if round(sqr(a1))=round(sqr(a2)+sqr(a3)) then inc(s);
end;


procedure ugol(x1,y1,x2,y2,x3,y3:integer);
var a,b,c,max:real;
s:integer;
begin
a:=sqrt(sqr(x2-x1)+sqr(y2-y1));
b:=sqrt(sqr(x3-x2)+sqr(y3-y2));
c:=sqrt(sqr(x3-x1)+sqr(y3-y1));
if (a>b) and (a>c) then bom(a,b,c);
if (b>a) and (b>c) then bom(b,a,c); if (c>a) and (c>b) then bom(c,a,b); end;


begin
assign(input,'input.txt');
assign(output,'output.txt');
reset(input);
rewrite(output);
readln(n);
for i:=1 to n do
for j:=1 to 2 do read(a[i,j]);
for i:=1 to 3 do mas[i]:=i;
while (true) do
begin
for i:=1 to 3 do write(mas[i],' ');
ugol(a[mas[1],1],a[mas[1],2],a[mas[2],1],a[mas[2],2],a[mas[3],1],a[mas[3],2]);
writeln;
i:=3;
while (i>0) and (mas[i]=n-3+i) do dec(i);

if i=0 then break;
inc(mas[i]);
for j:=i+1 to 3 do mas[j]:=mas[j-1]+1;
end;
write(s);
end.

Анализ и разбор задачи.Знания и умения.
Условие задачи:
Зональный тур олимпиады по информатике
за 2005 – 2006 учебный год
в г.Буинске Республики Татарстан.
Задача 3. Треугольники( 30 баллов).
На плоскости N точек.
Требуется составитььпрограмму, которая подсчитывает количество всех различных прямоугольников с вершинами в заданных точках.
Замечание:Треугольники, отличающиеся только порядком вершин, считаются совпадающимися, напрмер, треугольник АВС совпадает с треугольником ВАС и т.п.

Формат входных данных:
Первая строка входного файла INPUT.TXT содержит одно натуральное число N (3<=N<=256)- количество точек.Следующие N строк содержит координаты точек (x;y),разделенные пробелом, и где -32767<=x,y<=32767.
Формат выходных данных:
Выходной файл OUTPUT.TXTсодержит оджно число K - количество всех различных прямоугольных треугольников с вершинами в заданных точках.
INPUT.TXT
4
0 0
0 1
1 0
1 1

OUTPUT.TXT
4

Алгоритм

1)из входного файла input.txt считываем количество точек и записываем их координаты в двухмерный массив

2)генерируем сочетания по три точки

3)если треугольник содержит прямой угол увеличиваем счетчик

4)выводим количество прямоугольных треугольников

Знать:

  • оператор выбора "if <условие> then <оператор>"
  • комбинаторика, генерирование сочетаний по три
  • алгоритм определение является ли данный треугольник прямоугольным


Уметь:
  • работать с входными и выходными файлами input.txt output.txt
домой
Hosted by uCoz