有谁做了这道题~说说想法呗~顺便帮忙看看这段代码~为啥不对呀?
谢谢了~大牛们
#include<iostream>
#include<cmath>
using namespace std;
double are[505],sum;
struct point
{
double x,y;
}p[505];
double xmult(point p1,point p2,point p0)
{
return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
}
double area_triangle(point p1,point p2,point p3)
{
return fabs(xmult(p1,p2,p3))/2;
}
double area_polygon(int n)
{
double s1=0,s2=0;
int i;
for (i=0;i<n;i++)
s1+=p[(i+1)%n].y*p[i].x,s2+=p[(i+1)%n].y*p[(i+2)%n].x;
return fabs(s1-s2)/2;
}
void jisuan(int n)
{
memset(are,0,sizeof(are));
double min=1000000000;
int k;
for(int j=0;j<n-2;j++)
{
are[j]=area_triangle(p[j],p[j+1],p[j+2]);
if(are[j]<min)
{
min=are[j];
k=j;
}
}
are[n-2]=area_triangle(p[n-2],p[n-1],p[0]);
if(are[n-2]<min)
{
min=are[n-2];
k=n-2;
}
are[n-1]=area_triangle(p[n-1],p[0],p[1]);
if(are[n-1]<min)
{
min=are[n-1];
k=n-1;
}
//cout<<"min "<<min<<endl;
sum-=min;
for(int l=k+1;l<n-1;l++)
{
p[l].x=p[l+1].x;
p[l].y=p[l+1].y;
}
}
int main()
{
int n;
while(cin>>n)
{
sum=0;
if(n==0)
break;
for(int i=0;i<n;i++)
{
double a,b;
//scanf("%f%f",&a,&b);
cin>>a>>b;
p[i].x=a;
p[i].y=b;
}
sum=area_polygon(n);
for(int q=n;q>=n-3;q--)
{
jisuan(q);
}
printf("%.1lf\n",sum);
}
return 0;
}
谢谢了~大牛们
#include<iostream>
#include<cmath>
using namespace std;
double are[505],sum;
struct point
{
double x,y;
}p[505];
double xmult(point p1,point p2,point p0)
{
return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
}
double area_triangle(point p1,point p2,point p3)
{
return fabs(xmult(p1,p2,p3))/2;
}
double area_polygon(int n)
{
double s1=0,s2=0;
int i;
for (i=0;i<n;i++)
s1+=p[(i+1)%n].y*p[i].x,s2+=p[(i+1)%n].y*p[(i+2)%n].x;
return fabs(s1-s2)/2;
}
void jisuan(int n)
{
memset(are,0,sizeof(are));
double min=1000000000;
int k;
for(int j=0;j<n-2;j++)
{
are[j]=area_triangle(p[j],p[j+1],p[j+2]);
if(are[j]<min)
{
min=are[j];
k=j;
}
}
are[n-2]=area_triangle(p[n-2],p[n-1],p[0]);
if(are[n-2]<min)
{
min=are[n-2];
k=n-2;
}
are[n-1]=area_triangle(p[n-1],p[0],p[1]);
if(are[n-1]<min)
{
min=are[n-1];
k=n-1;
}
//cout<<"min "<<min<<endl;
sum-=min;
for(int l=k+1;l<n-1;l++)
{
p[l].x=p[l+1].x;
p[l].y=p[l+1].y;
}
}
int main()
{
int n;
while(cin>>n)
{
sum=0;
if(n==0)
break;
for(int i=0;i<n;i++)
{
double a,b;
//scanf("%f%f",&a,&b);
cin>>a>>b;
p[i].x=a;
p[i].y=b;
}
sum=area_polygon(n);
for(int q=n;q>=n-3;q--)
{
jisuan(q);
}
printf("%.1lf\n",sum);
}
return 0;
}