此题目的输出好恶心..WA一次之后,发现输出的时候,有些情况没考虑到,重新再敲代码,以至于代码敲了老长老长...还有A过去了。
代码如下:
#include<stdio.h>
#include<iostream>
#include<math.h>
using namespace std;
struct point
{
double x;
double y;
};
struct Line
{
point a;
point b;
};
point interection(Line u,Line v)
{
point res=u.a;
double k=((u.a.x-v.a.x)*(v.a.y-v.b.y)-(u.a.y-v.a.y)*(v.a.x-v.b.x))/((u.a.x-u.b.x)*(v.a.y-v.b.y)-(u.a.y-u.b.y)*(v.a.x-v.b.x));
res.x+=(u.b.x-u.a.x)*k;
res.y+=(u.b.y-u.a.y)*k;
return res;
}
point circumcenter(point a,point b,point c)// 求三角形外心的模板
{
Line u,v;
u.a.x=(a.x+b.x)/2;
u.a.y=(a.y+b.y)/2;
u.b.x=u.a.x-a.y+b.y;
u.b.y=u.a.y+a.x-b.x;
v.a.x=(a.x+c.x)/2;
v.a.y=(a.y+c.y)/2;
v.b.x=v.a.x-a.y+c.y;
v.b.y=v.a.y+a.x-c.x;
return interection(u,v);
}
double dis(point a,point b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
int main()
{
point a,b,c;
while(scanf("%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y)!=EOF)
{
point ans;
ans=circumcenter(a,b,c);
double d=dis(ans,a);
if(ans.x>0&&ans.y>0)printf("(x - %.3lf)^2 + (y - %.3lf)^2 = %.3lf^2\n",ans.x,ans.y,d);
else if(ans.x>0&&ans.y<0)printf("(x - %.3lf)^2 + (y + %.3lf)^2 = %.3lf^2\n",ans.x,fabs(ans.y),d);
else if(ans.x<0&&ans.y>0)printf("(x + %.3lf)^2 + (y - %.3lf)^2 = %.3lf^2\n",fabs(ans.x),ans.y,d);
else if(ans.x<0&&ans.y<0)printf("(x + %.3lf)^2 + (y + %.3lf)^2 = %.3lf^2\n",fabs(ans.x),fabs(ans.y),d);
else if(ans.x==0&&ans.y>0)printf("x^2 + (y - %.3lf)^2 = %.3lf^2\n",ans.y,d);
else if(ans.x==0&&ans.y<0)printf("x^2 + (y + %.3lf)^2 = %.3lf^2\n",fabs(ans.y),d);
else if(ans.x>0&&ans.y==0)printf("(x - %.3lf)^2 + y^2 = %.3lf^2\n",ans.x,d);
else if(ans.x<0&&ans.y==0)printf("(x + %.3lf)^2 + y^2 = %.3lf^2\n",fabs(ans.x),d);
else if(ans.x==0&&ans.y==0)printf("x^2 + y^2 = %.3lf^2\n",d);
if(ans.x>0&&ans.y>0)
{
printf("x^2 + y^2 - %.3lfx - %.3lfy",2*ans.x,2*ans.y);
if(ans.x*ans.x+ans.y*ans.y<d*d)printf(" - %.3lf = 0\n\n",d*d-ans.x*ans.x-ans.y*ans.y);
else if(ans.x*ans.x+ans.y*ans.y>d*d)printf(" + %.3lf = 0\n\n",ans.x*ans.x+ans.y*ans.y-d*d);
else printf("= 0\n\n");
}
else if(ans.x>0&&ans.y<0)
{
printf("x^2 + y^2 - %.3lfx + %.3lfy",2*ans.x,2*fabs(ans.y));
if(ans.x*ans.x+ans.y*ans.y<d*d)printf(" - %.3lf = 0\n\n",d*d-ans.x*ans.x-ans.y*ans.y);
else if(ans.x*ans.x+ans.y*ans.y>d*d)printf(" + %.3lf = 0\n\n",ans.x*ans.x+ans.y*ans.y-d*d);
else printf(" = 0\n\n");
}
else if(ans.x<0&&ans.y>0)
{
printf("x^2 + y^2 + %.3lfx - %.3lfy",2*fabs(ans.x),2*ans.y);
if(ans.x*ans.x+ans.y*ans.y<d*d)printf(" - %.3lf = 0\n\n",d*d-ans.x*ans.x-ans.y*ans.y);
else if(ans.x*ans.x+ans.y*ans.y>d*d)printf(" + %.3lf = 0\n\n",ans.x*ans.x+ans.y*ans.y-d*d);
else printf(" = 0\n\n");
}
else if(ans.x<0&&ans.y<0)
{
printf("x^2 + y^2 + %.3lfx + %.3lfy",2*fabs(ans.x),2*fabs(ans.y));
if(ans.x*ans.x+ans.y*ans.y<d*d)printf(" - %.3lf = 0\n\n",d*d-ans.x*ans.x-ans.y*ans.y);
else if(ans.x*ans.x+ans.y*ans.y>d*d)printf(" + %.3lf = 0\n\n",ans.x*ans.x+ans.y*ans.y-d*d);
else printf(" = 0\n\n");
}
else if(ans.x==0&&ans.y>0)
{
printf("x^2 + y^2 - %.3lfy",2*ans.y);
if(ans.y*ans.y>d*d)printf(" + %.3lf = 0\n\n",ans.y*ans.y-d*d);
else if(ans.y*ans.y<d*d)printf(" - %.3lf = 0\n\n",d*d-ans.y*ans.y);
else printf(" = 0\n\n");
}
else if(ans.x==0&&ans.y<0)
{
printf("x^2 + y^2 + %.3lfy",2*fabs(ans.y));
if(ans.y*ans.y>d*d)printf(" + %.3lf = 0\n\n",ans.y*ans.y-d*d);
else if(ans.y*ans.y<d*d)printf(" - %.3lf = 0\n\n",d*d-ans.y*ans.y);
else printf(" = 0\n\n");
}
else if(ans.x==0&&ans.y==0)
{
printf("x^2 + y^2 - %.3lf = 0\n\n",d*d);
}
else if(ans.x>0&&ans.y==0)
{
printf("x^2 + y^2 - %.3lfx",2*ans.x);
if(ans.x*ans.x>d*d)printf(" + %.3lf = 0\n\n",ans.x*ans.x-d*d);
else if(ans.y*ans.y<d*d)printf(" - %.3lf = 0\n\n",d*d-ans.x*ans.x);
else printf(" = 0\n\n");
}
else if(ans.x<0&&ans.y==0)
{
printf("x^2 + y^2 + %.3lfx",2*fabs(ans.x));
if(ans.x*ans.x>d*d)printf(" + %.3lf = 0\n\n",ans.x*ans.x-d*d);
else if(ans.x*ans.x<d*d)printf(" - %.3lf = 0\n\n",d*d-ans.x*ans.x);
else printf(" = 0\n\n");
}
}
return 0;
}