来源:挑战程序设计竞赛
原理:在三角形中的最长边的长度小于其余两边的长度之和
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
#define Max 100
int a[Max];
int main()
{
int n,i,j,k,ans = 0;
cin >> n;
for(i = 0;i < n;i++)
cin >> a[i];
for(i = 0;i < n;i++)
{
for(j= i+1;j < n;j++)
{
for(k = j+1;k < n;k++)
{
int len = a[i] + a[j] +a[k]; //周长
int maxn = max(a[i],max(a[j],a[k])); //三角形三边中的最大值
int ret = len - maxn; //三角形其余两边的和
if(maxn < ret)
{
ans = max(ans,len);
}
}
}
}
cout << ans <<endl;
return 0;
}
算法的时间复杂度为:
Java代码:
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for(int i = 0;i < n;i++) {
arr[i] = sc.nextInt();
}
int ans = 0;
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 = arr[i]+arr[j]+arr[k];
int ma = Math.max(arr[i], Math.max(arr[j], arr[k]));
int rest = len-ma;
if(ma < rest) {
ans = Math.max(ans, len);
}
}
}
}
System.out.println(ans);
sc.close();
}
}