zoukankan      html  css  js  c++  java
  • 算法提高 12-1三角形

     算法提高 12-1三角形  
    时间限制:1.0s   内存限制:256.0MB
        
    问题描述
      为二维空间中的点设计一个结构体,在此基础上为三角形设计一个结构体。分别设计独立的函数计算三角形的周长、面积、中心和重心。输入三个点,输出这三个点构成的三角形的周长、面积、外心和重心。结果保留小数点后2位数字。
    样例输出
    与上面的样例输入对应的输出。
    例:
    数据规模和约定
      输入数据中每一个数的范围。
      例:doule型表示数据。
     
    问题不难,感觉有点麻烦。
    另外如何用克拉默法则解二元一次方程。
    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <vector>
    #include <queue>
    #include <cstring>
    #include <algorithm>
    #include <cstdlib>
    #define for(i,x,n) for(int i=x;i<n;i++)
    #define ll long long int
    #define INF 0x3f3f3f3f
    #define MOD 1000000007
    #define MAX_N 50005
    
    using namespace std;
    
    struct triangle{double x,y;};
    triangle a,b,c;
    
    double perimeter(triangle a,triangle b,triangle c){
        double d1=sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2));
        double d2=sqrt(pow(b.x-c.x,2)+pow(b.y-c.y,2));
        double d3=sqrt(pow(a.x-c.x,2)+pow(a.y-c.y,2));
        return d1+d2+d3;
    }
    
    double area(triangle a,triangle b,triangle c){
        double d1=sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2));
        double d2=sqrt(pow(b.x-c.x,2)+pow(b.y-c.y,2));
        double d3=sqrt(pow(a.x-c.x,2)+pow(a.y-c.y,2));
        double p=(d1+d2+d3)/2;
        double area=sqrt(p*(p-d1)*(p-d2)*(p-d3));
        return area;
    }
    
    triangle external(triangle aa,triangle bb,triangle cc){
        double a=2*(aa.x-bb.x);
        double b=2*(aa.y-bb.y);
        double z=aa.x*aa.x-bb.x*bb.x+aa.y*aa.y-bb.y*bb.y;
        double a1=2*(cc.x-bb.x);
        double b1=2*(cc.y-bb.y);
        double z1=cc.x*cc.x-bb.x*bb.x+cc.y*cc.y-bb.y*bb.y;
        triangle ex;
        //ex.y=(z-z1*a/a1)/(b-a*b1/a1);
        //ex.x=(z-b*ex.y)/a;
        ex.x=((z*b1)-(z1*b))/((a*b1)-(a1*b));
        ex.y=((a*z1)-(a1*z))/((a*b1)-(a1*b));
        return ex;
    }
    
    triangle gravityOfCenter(triangle a,triangle b,triangle c){
        triangle gra;
        gra.x=(a.x+b.x+c.x)/3;
        gra.y=(a.y+b.y+c.y)/3;
        return gra;
    }
    
    int main()
    {
        //freopen("data.txt", "r", stdin);
        //freopen("data.out", "w", stdout);
        scanf("%lf %lf",&a.x,&a.y);
        scanf("%lf %lf",&b.x,&b.y);
        scanf("%lf %lf",&c.x,&c.y);
        printf("%.2lf
    ",perimeter(a,b,c));
        printf("%.2lf
    ",area(a,b,c));
        printf("%.2lf %.2lf
    ",external(a,b,c).x,external(a,b,c).y);
        printf("%.2lf %.2lf
    ",gravityOfCenter(a,b,c).x,gravityOfCenter(a,b,c).y);
        //fclose(stdin);
        //fclose(stdout);
        return 0;
    }
  • 相关阅读:
    rm
    Linux下解包/打包,压缩/解压命令
    虚拟机安装---vm12+ubuntukylin16.04
    mysql-5.6.41-winx64安装
    tensorflow学习笔记一------下载安装,配置环境(基于ubuntu16.04 pycharm)
    大一上学期C语言学习心得总结
    常见HTTP状态码
    Java语言基础及java核心
    linux下安装JMeter(小白教程)
    Linux下安装JDK(小白教程)
  • 原文地址:https://www.cnblogs.com/TWS-YIFEI/p/6363565.html
Copyright © 2011-2022 走看看