三角形
思路:
1.求面积:求面积可以用差积/2
2.求边上的点数:边上的点数边上x和y的坐标差的最大公阅数-1.
代码:
#include <bits/stdc++.h> const double PI=acos(-1.0); #define lowbit(x) (x&-x); typedef long long LL; using namespace std; //最大公约数 LL gcd(LL a,LL b) { return b==0?a:gcd(b,a%b); } struct Point{ LL x,y; Point(LL x=0,LL y=0):x(x),y(y){} }; //计算差积 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); } int main() { LL xa,ya,xb,yb,xc,yc; while(cin>>xa && xa!=-1) { cin>>ya; cin>>xb>>yb>>xc>>yc; Point a,b,c; a.x=xa,a.y=ya,b.x=xb,b.y=yb,c.x=xc,c.y=yc; LL s=abs(xmult(a,b,c)); cout<<fixed<<setprecision(1)<<s*1.0/2<<" "; LL ab=gcd(abs(xa-xb),abs(ya-yb))-1; LL ac=gcd(abs(xa-xc),abs(ya-yc))-1; LL bc=gcd(abs(xb-xc),abs(yb-yc))-1; LL i=(s-(ab+ac+bc+3)+2)/2; cout<<i<<" "<<ab<<" "<<bc<<" "<<ac<<endl; } return 0; }
全部评论
(0) 回帖