1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Задача такая: Из заданного на плоскости множества точек выбрать 3, не лежащих на одной прямой и состовляющих треугольник наименьшей площади. Как я понимаю плоскость задаем в виде двумерного массива?А что с этим массивом потом делать?
Плоскость нет (по-моему) смысла задавать двумерным массивом. Задавать нужно *точки*, а не плоскость. Точки можно задать (одномерным) массивом, каждый элемент - пара (x, y). Или двумя массивами - x[1..n] и y[1..n].
Лобовое решение - тремя вложенными циклами перебрать первую, вторую и третью точки, и выбрать наилучший треугольник. Это будет O(n^3).
Решение похитрее - за O(n^2). Расскажу, если кому-то действительно интересно.
Может можно и за O(n log n). Но это уже совсем сложно, надо думать.
если границы цикла грамотно установить - оценка чуть получше будет... то есть каждое сочетание проверить один раз. Ведь треугольники из точек с номерами 1,2 и 3 (123, 132, 213, 231, 321, 312) имеют одну и ту же площадь.
--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует. На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует. На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
так... площадь ты пытаешься считать по формуле Герона - логично. только а,b и c как-то странно находишь длина стороны - это расстояние между двумя точками, а не разность между двумя координатами одной точки...
--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует. На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
А формула для длины отрезка такая sqrt[ (x1-x2)^2 + (y1-y2)^2 ]?Я переделал но все равно ничего не работает
#include <stdio.h> #include <conio.h> #include <iostream.h> #include <stdlib.h> #include <math.h> int main(void) { clrscr(); int X[10],Y[10],i,j,k; float s,Smin,a,b,c,p; for (i=0;i<=9;i++) { X[i]=random(100); Y[i]=random(100); }
for (i=0;i<=9;i++) { a=sqrt((X[i+1]-X[i])*(X[i+1]-X[i])+(Y[i+1]-Y[i])*(Y[i+1]-Y[i]); for (j=1;j<=9;j++) { b=sqrt((X[j+1]-X[j])*(X[j+1]-X[j])+(Y[j+1]-Y[j])*(Y[j+1]-Y[j]);
for (k=2;k<=9;k++) { c=sqrt((X[k+1]-X[k])*(X[k+1]-X[k])+(Y[k+1]-Y[k])*(Y[k+1]-Y[k]); p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c)); if (i==0) Smin=s; else if (s<Smin) Smin=s; } } } cout<<"Smin="<<Smin; getch(); return 0; }