洛谷P5735 C++解法

题目要求我们设三个不同直线的二位坐标,怎么设呢?如果使用二位数组,那么就太麻烦了,连输入都要写个循环,我这破脑子,可没功夫想那么多。这一题只需要3个坐标,我们就可以写的简单一点(投机取巧):

double line_1_a = 0, line_1_b = 0, line_1 = 0;
double line_2_a = 0, line_2_b = 0, line_2 = 0;
double line_3_a = 0, line_3_b = 0, line_3 = 0;

line_n代表两点之间的长度,line_n_a/b代表坐标两边的值。

line_n是待会我们要用函数算出来的,肯定是不用输入。那么接下来,就是对坐标的输入:

cin >> line_1_a >> line_1_b;
cin >> line_2_a >> line_2_b;
cin >> line_3_a >> line_3_b;

完了输入,接下来就是对坐标进行运算,最终得出的数就是两点之间的长度。考虑到这一段代码会重用3次,所以写了个函数:

double get_line(double n, double m, double x, double y)
{
    double line = 0;
    line = sqrt(abs((n - x) * (n - x)) + abs((m - y) * (m - y)));
    return line;
}

n,m,x,y是用来表示两个坐标的,n和m代表第一个坐标,x和y代表第二个坐标。坐标输进去了,接下来就是处理坐标。处理坐标的算式细心的同学可能已经在题目中发现了,没错,就是dis什么什么的。至于abs的作用,假如n - x = -1,这就会导致程序出错,使用绝对值函数就可以把-1变成1了。

函数写完了,把函数返回的值输进对应的变量里面,就得到了三角形三边长度,把它们加起来就得到周长了。结果保留两位小数,使用printf("%.2lf", ...);就可以解决了。

当当!大功告成!

代码:

#include <iostream>
#include <cmath>
#include <cstdlib>
#include <cstdio>

using namespace std;

double get_line(double n, double m, double x, double y)
{
    double line = 0;
    line = sqrt(abs((n - x) * (n - x)) + abs((m - y) * (m - y)));
    return line;
}

int main()
{
    double line_1_a = 0, line_1_b = 0, line_1 = 0;
    double line_2_a = 0, line_2_b = 0, line_2 = 0;
    double line_3_a = 0, line_3_b = 0, line_3 = 0;

    cin >> line_1_a >> line_1_b;
    cin >> line_2_a >> line_2_b;
    cin >> line_3_a >> line_3_b;

    line_1 = get_line(line_1_a, line_1_b, line_2_a, line_2_b);
    line_2 = get_line(line_1_a, line_1_b, line_3_a, line_3_b);
    line_3 = get_line(line_2_a, line_2_b, line_3_a, line_3_b);

    double sum = line_1 + line_2 + line_3;
    
    printf("%.2lf", sum);
    cout << endl;

    system("pause");
    return 0;
}

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值