B2050 三角形判断

· · 个人记录

众所周知:

如果在给定的三条线段中,任意两条线段长度之和均大于第三条线段的长度,那么这三条线段能构成一个三角形。 在这里,令三条线段长度分别为 a, b, c。不妨设a\le b\le c

很显然,a+c<bb+c<a恒成立。于是只要使a+b>c成立,那么这三条线段就能够成三角形。

怎么求出 ab 呢?排序啊!

if (a > b){
    tmp = b;
    b = a;
    a = tmp;
}
if (a > c){
    tmp = c;
    c = a;
    a = tmp;
}
if (b > c){
    tmp = c;
    c = b;
    b = tmp;
}

太繁琐了!

可以发现代码十分的复杂。事实上, tmp 的功能可以用 swap() 函数代替:

if (a > b)swap (a, b);
if (a > c)swap (a, c);
if (b > c)swap (b, c);

在这里, swap() 函数的功能相当于将 ab 两个变量在电脑中存储的地址调换位置。

还是好麻烦啊!

三个变量的代码看似简洁,但如果变量是 5 个,甚至 10000 个呢?

if (a > b)swap (a, b);
if (a > c)swap (a, c);
if (a > d)swap (a, d);
if (a > e)swap (a, e);
……………………

这时就要请出我们大名鼎鼎的 sort() 函数了!

第一步,定义一个大小为 3 的数组 t[3];

int t[3];

第二步,把 abc 存进去。

cin >> t[0] >> t[1] >> [t2];
//这里相当于cin>>a>>b>>c;t[0]=a,t[1]=b,t[2]=c;

第三步,调用 sort() 函数。

sort (t, t + 3);

这里的 t 表示数组名,逗号前只写一个 t 表示从数组最前位 t[0] 开始排序,3 则表示到数组的第三个元素 t[2] 停止排序。总体相当于将 t[0]t[2] 之间的数(包括它们两个)从小到大排序。这样,a 就是 t[0]b 就是 t[1]c 就是 t[2]了。

最后热心提醒:sort() 要开万能头!!!

#include <bits/stdc++.h>
using namespace std;
int main (){
    int t[3];
    cin >> t[0] >> t[1] >> t[2];
    sort (t, t + 3);
    if (t[0] + t[1] > t[2])cout << 1;
    else cout << 0;
    return 0; 
}

蒟蒻的第一篇氵题题解,求管理过审!谢谢qwq