挑战程序设计竞赛(水题打卡)

一、题目

有n根棍子,棍子i的长度为ai。想要从中选出三根棍子,使其构成的三角形的周长最大。请输出最大的周长,如果无法构成三角形,则输出0。

二、解法

1)思路:首先根据长度排序(假设从小到大),贪心的选取(从大到小的遍历)如果与前两根构成三角形,则跳出循环。

正确性:如果一根棍子与前两个都不能构成三角形,与更前面的更不能构成三角形

2)代码:

 1 #include<stdio.h>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn = 100 + 10;
 5 int len[maxn];
 6 
 7 int main()
 8 {
 9     int n,res = 0;
10     scanf("%d", &n);
11     for (int i = 0; i < n; i++)
12         scanf("%d", &len[i]);
13     sort(len, len + n);
14     for (int i = n - 1; i >= 2; i--)
15     {
16         if (len[i - 1] + len[i - 2] > len[i])
17         {
18             res = len[i - 1] + len[i - 2] + len[i];
19             break;
20         }
21     }
22     printf("%d", res);
23     return 0;
24 }
原文地址:https://www.cnblogs.com/lfri/p/9321827.html