HDU 6374(拼三角形 **)

题意是在给定的线段长中挑选出能拼成三角形的最长的三条边,输出三角形的周长。
先对所有边排序,从大到小,满足两较短边之和大于第三边就输出,若从未输出过就输出 -1

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 #include <algorithm>
 5 using namespace std;
 6 int a[1009];
 7 int main()
 8 {
 9     int n;
10     bool f;
11     while(~scanf("%d",&n))
12     {
13         f = true;
14         for(int i = 0; i < n; i++)
15         {
16             scanf("%d",&a[i]);
17         }
18         sort(a,a+n);
19         for(int i = n-1; i >= 2; i--)
20         {
21             if(a[i-1] + a[i-2] > a[i])
22             {
23                 f = 0;
24                 printf("%d
",a[i-1]+a[i-2]+a[i]);
25                 break;
26             }
27         }
28         if(f)   puts("-1");
29     }
30     return 0;
31 }
View Code
日后若能有更好的想法,再来完善。 希望看到的大神不吝赐教 orz
原文地址:https://www.cnblogs.com/Taskr212/p/9460570.html