N
nike64n
Задание:
Выбрать три различные точки из заданного множества точек на плоскости так, чтобы была минимальной разность между количествами точек, лежащих внутри и вне треугольника с вершинами в выбранных точках.
Почему не работает? Помогите исправить ошибки, заранее благодарю.
Выбрать три различные точки из заданного множества точек на плоскости так, чтобы была минимальной разность между количествами точек, лежащих внутри и вне треугольника с вершинами в выбранных точках.
Почему не работает? Помогите исправить ошибки, заранее благодарю.
C++:
#include <iostream>
int main(int argc, char* argv[])
{
//----------------------------------------------------------
float A[100][2];
int n;
cout << "n="; cin>>n;
for(int i=0; i<n; i++)
{for(int j=0; j<2; j++)
for(int k=0; k<4; k++)
{cout<<"["<<i<<"]"<<"["<<j<<"]"<<"["<<k<<"]="; cin>>A[i] [j] [k];}
}
//----------------------------------------------------------
float S=0, So=0, s1, s2, s3, p, p1, p2, p3, a, b, c, d, l, f;
int r=(n-3);
int v=0, w=0, x1, x2, x3, y1, y2, y3;
//----------------------------------------------------------
for (int i=0; i<n-2; i++)
for (int j=i+1; j<n-1; j++)
for (int k=j+1; k<n; k++)
{ v=0;
w=0;
{
a=sqrt(pow((A[i][0]-A[j][0]),2)+pow((A[i][1]-A[j][1]),2));
b=sqrt(pow((A[j][0]-A[k][0]),2)+pow((A[j][1]-A[k][1]),2));
c=sqrt(pow((A[k][0]-A[i][0]),2)+pow((A[k][1]-A[i][1]),2));
p=((a+b+c)/2);
S=sqrt(p*(p-a)*(p-b)*(p-c));
for (int z=0; z<n; z++)
{
if((z!=i)&&(z!=j)&&(z!=k))
{
d=sqrt(pow((A[i][0]-A[z][0]),2)+pow((A[i][1]-A[z][1]),2));
l=sqrt(pow((A[j][0]-A[z][0]),2)+pow((A[j][1]-A[z][1]),2));
f=sqrt(pow((A[k][0]-A[z][0]),2)+pow((A[k][1]-A[z][1]),2));
p1=((a+l+d)/2);
s1=sqrt(p1*(p1-a)*(p1-l)*(p1-d));
p2=((b+l+f)/2);
s2=sqrt(p2*(p2-b)*(p2-l)*(p2-f));
p3=((c+d+f)/2);
s3=sqrt(p3*(p3-c)*(p3-d)*(p3-f));
So=s1+s2+s3;
if(S==So) v++;
else w++;
}
}
int h=abs(v-w);
if(h<r)
{ r=h;
x1=A[i][0]; y1=A[i][1];
x2=A[j][0]; y2=A[j][1];
x3=A[k][0]; y3=A[k][1];
}
}
}
cout<<"A=("<<x1<<"; "<<y1<<")\n";
cout<<"B=("<<x2<<"; "<<y2<<")\n";
cout<<"C=("<<x3<<"; "<<y3<<")\n";
}