收获:
algorithm是max函数的头文件,一次只能比较两个,取其中最大的值。
1.6轻松热身
1.6.1先从简单题开始
题目:三角形
n根棍子,棍子i的长度为aᵢ。选三跟组成三角形。输出最大周长,无法组成则输出0。
限制条件:
3<=n<=100
1<=aᵢ<=1e6
样例
输入:n=5 a={2,3,4,5,10}
输出:12
输入:n=4 a={4,5,10,20}
输出:0
算法:三重循环枚举判断
复杂度是O(n³)。将n=100带入得1e6。不超1秒
程序:
#include<cstdio>
#include <algorithm>
//algorithm是max函数的头文件,一次只能比较两个,取其中最大的值。
using namespace std;
const int MAX_N = 100000;
//输入
int n=5,a[MAX_N]={2,3,4,5,10};
//int n=4,a[MAX_N]={4,5,10,20};
void solve(){
int ans = 0;//答案answer
//让i<j<k,这样棍子就不会被重复选中了
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
for(int k=j+1;k<n;k++){
int len=a[i]+a[j]+a[k]; //周长
int ma=max(a[i],max(a[j],a[k])); //最长棍子的长度
int rest=len-ma; //其余两根棍子的长度之和
if(ma<rest){
//可以组成三角形,如果可以更新答案则更新
ans=max(ans,len);
}
}
}
}
//输出
printf("%d\n",ans);
}
int main(){
solve();
return 0;
}