有n(n≥4)个正整数,存放在数组a中,设计一个算法从中选出3个正整数组成周长最长的三角形,输出该最长三角形的周长,若无法组成三角形则输出0。用c++来完成
时间: 2024-09-28 20:04:08 浏览: 119
为了解决这个问题,我们可以使用C++编写一个贪心算法。首先,我们需要对数组`a`进行排序,然后从最大的三个元素开始遍历,检查它们是否满足构成三角形的条件(即任意两边之和大于第三边)。如果找到一组可以构成三角形的三边,我们就返回这三边的和;否则,当遍历完前三个最大值都没有符合条件的情况时,返回0。
以下是C++代码实现:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
int maxTrianglePerimeter(const std::vector<int>& a) {
std::sort(a.begin(), a.end(), std::greater<int>()); // 对数组降序排列
int perimeter = 0;
for (int i = 0; i < 3 && i < a.size(); ++i) { // 取前三大的数
if (i > 0 && a[i] + a[i - 1] >= a[i]) continue; // 检查三角形条件
perimeter = a[i] + a[i + 1] + a[i + 2]; // 如果满足条件,更新周长
break; // 找到后不再继续往后查找
}
return perimeter;
}
int main() {
int n;
std::cout << "请输入正整数的数量(n ≥ 4): ";
std::cin >> n;
std::vector<int> a(n);
std::cout << "请输入" << n << "个正整数: ";
for (int& num : a) {
std::cin >> num;
}
int result = maxTrianglePerimeter(a);
if (result != 0)
std::cout << "周长最长的三角形的周长是: " << result << std::endl;
else
std::cout << "无法组成有效的三角形" << std::endl;
return 0;
}
```
阅读全文
相关推荐













