挑战程序设计竞赛(水题打卡)
一、题目
有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 }
个性签名:时间会解决一切