IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Равнобедренные треугольники., Сколько равнобедренных треугольников получатся из N точек.
DarkWishmaster
сообщение 10.02.2011 19:12
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 168
Пол: Мужской

Репутация: -  3  +


Вообщем дано N точек и их координаты:
Например:
N:=4
0 0
2 2
-2 2
2 -2 Сколько равнобедренных треугольников получатся если их соеденить?
Я попробовал так:
берем 1 точку и 2, мерим растояние(D), потом идём по другим точкам и мерим растояние от 1 до каждой точки, если совподает с (D) то inc(Count);
Потом 1 точка и 3 точка, мерим растояние и. т
Потом уже 2 и 3 точка, и.т
Всё равно бред получается, может у вас есть какие нибудь идеи.
  File  Edit  Search  Run  Compile  Debug  Tools  Options  Window  Help

║writeln(N);
║for i:=1 to N do
║ writeln(x[i],',',y[i]);
║ i:=0;
║ while i<N-2 do begin
║ inc(i); k:=0;
║ while k<N-2 do begin
║ inc(k); j:=0;

║ dx:=abs(x[i]-x[i+k]);
║ dy:=abs(y[i]-y[i+k]);
║ while j<N-k-i do begin
║ inc(j);
║ if (dx=abs(x[i]-x[i+k+j]))
║ and (dy=abs(y[i]-y[i+k+j])) then
║ inc(M);
║ end;
║ end;
║ end;



Сообщение отредактировано: DarkWishmaster - 10.02.2011 19:14
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 10.02.2011 21:22
Сообщение #2


Гость






Вот ключ к решению: Операции над векторами
 К началу страницы 
+ Ответить 
DarkWishmaster
сообщение 18.02.2011 20:55
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 168
Пол: Мужской

Репутация: -  3  +


Цитата(volvo @ 10.02.2011 22:22) *

Вот ключ к решению: Операции над векторами



║ for i:=1 to n-2 do
║ for j:=i+1 to n-1 do

║ for k:=j+1 to n do
║ begin
║ D1:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));
║ D2:=sqrt(sqr(x[j]-x[k])+sqr(y[j]-y[k]));
║ D3:=sqrt(sqr(x[k]-x[i])+sqr(y[k]-y[i]));
║ if (Compar(D1,D2)=True)
║ or (COmpar(D2,D3)=True)
║ or (COmpar(D1,D3)=True) then inc(M);


║ end;


║ writeln(M);
║ write(F, M); close(F);
║readkey;
║end.



Такая проблема, если поставить точки на одной прямой, на равные растояние, то ответ будет будет больше нуля, хотя должен быть 0.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 19.02.2011 11:38
Сообщение #4


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(DarkWishmaster @ 18.02.2011 20:55) *
Такая проблема, если поставить точки на одной прямой, на равные растояние, то ответ будет будет больше нуля, хотя должен быть 0.
А почему это он должен быть 0?
Выбираем точки 1, 2, 3 на оси Х, соединяем. Получаем равнобедренный треугольник (стороны [1,2] и [2,3] - равны)..
Где я ошибся?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 18:58
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"