hdu 4195
我本来的想法求这个三角形的外心~~ 可以得到三条边对应圆心角 则这个正多边形的一条边对应的圆心角 应可以整除这三个角
但是一开始 没想到暴力枚举边数n, 还用模板求圆心坐标 然后求圆心角 导致误差比较大 实际上圆心角是圆周角的两倍 ~~~ 初中知识 只要求三角形的三个内角就可以
然后暴力枚举~~~~
#include <iostream> #include <cstdio> #include <cmath> #define esp 1e-7 using namespace std; const double pi = acos(-1.0); struct Point { double x; double y; }; double Dis(Point p, Point q) { double dx=p.x-q.x; double dy=p.y-q.y; return sqrt(dx*dx+dy*dy); } double getangle(Point a, Point b, Point c) { double d1 = Dis(a, b), d2 = Dis(a, c), d3 = Dis(b, c); return (d1*d1 + d2*d2 - d3*d3)/(2*d1*d2); } int main() { Point p[3]; while(scanf("%lf%lf%lf%lf%lf%lf",&p[0].x,&p[0].y,&p[1].x,&p[1].y,&p[2].x,&p[2].y) == 6) { double ans1,ans2,ans3; ans1 = acos(getangle(p[0], p[1], p[2])); ans2 = acos(getangle(p[0], p[2], p[1])); ans3 = acos(getangle(p[2], p[1], p[0])); for(int i = 3; i <= 1000; i++) { if(fabs(ans1*i/pi - (int)(ans1*i/pi+esp)) < esp && fabs(ans3*i/pi - (int)(ans3*i/pi+esp)) < esp && fabs(ans2*i/pi - (int)(ans2*i/pi+esp)) < esp) { printf("%d\n",i); break; } } } return 0; }