Консультация № 186903
07.12.2012, 07:09
0.00 руб.
0 2 0
Здравствуйте, уважаемые эксперты! Прошу вас помочь решить следующую задачу:
Дано множество точек на плоскости. Найти прямую, содержащую максимальное количество точек данного множества:
1. определить коэффициенты уравнения прямой;
2. указать список точек.

Обсуждение

Неизвестный
10.12.2012, 12:03
общий
10.12.2012, 12:08
Адресаты:
Добрый день! Предлагаемое решение. Code::Blocks/G++
Код:
#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
system("chcp 1251 > nul");
const int Nmax = 100;
int n, a, b, c;
cout << "Введите кол-во точек ";
cin >> n;
int m[Nmax],ma[Nmax],mb[Nmax],mc[Nmax];
for (int i=0; i!=n*2; ++i)
cin >> m[i];
cout << endl;
int p=0;


//____________________________________________Уравнения
for(int d=0; d!=n*2-2; d+=2)
{
for(int i=d; i!=n*2; i+=2)
{

b=m[i+2]-m[d];
a=(m[i+3]-m[d+1])*(-1);
c=(-1)*b*(m[d+1])-(a*m[d]);
ma[p]=a;
mb[p]=b;
mc[p]=c;
++p;
}
--p;
}
//____________________________________________Уравнения{end}




//____________________________________________Сокращение
for(int i=2; i!=p; ++i)
for(int z=0; z!=p; ++z)
{
if(ma[z]%i==0 && mb[z]%i==0 && mc[z]%i==0)
{
ma[z]=ma[z]/i;
mb[z]=mb[z]/i;
mc[z]=mc[z]/i;
}
if(ma[z]<0)
{
ma[z]=ma[z]*(-1);
mb[z]=mb[z]*(-1);
mc[z]=mc[z]*(-1);
}

}
//____________________________________________Сокращение{end}




//____________________________________________Подсчёт уравнений
int col=0,col2=0,per=0;
for(int i=0; i!=p-1; ++i)
{
for(int j=i; j!=p-1; ++j)
{
if(ma[i]==ma[j+1] && mb[i]==mb[j+1] && mc[i]==mc[j+1])
++col2;
}
if(col2>col)
{
col=col2;
per=i;
}
col2=0;
}

//____________________________________________Подсчёт уравнений{end}

cout << "Коэффициенты уравнения " << endl;
cout << "a= " << ma[per] << ", b= " << mb[per] << ", c= " << mc[per] << endl;
cout << "Точки прямой, удовлетворяющие уравнению: " << endl;


//____________________________________________Нахождение точек
for(int i=0; i!=n*2; i+=2)
if((m[i]*ma[per]+m[i+1]*mb[per]+mc[per])==0)
cout << "x= " << m[i] << ", y= " << m[i+1] << endl;


//____________________________________________Нахождение точек{end}

return 0;
}

С уважением.
давно
Академик
320937
2216
11.12.2012, 15:27
общий
Добрый день, Сергей! Выложи, пожалуйста, ответ на наш сайт (от Виктора Белова).
Удачи!
Форма ответа