书里给出比较无脑的做法,三个for循环复杂度是n的立方。如果先把数列排序,依次判断连续三个数是否能形成三角形,可以把时间复杂度控制在nlogn。#include<stdio.h> #include<algorithm> using namespace std; int main() { int n,a[10],i,ans=0; scanf("%d",&n); for(i=0;i<n;++i) { scanf("%d",&a[i]); } sort(a,a+n);//由小到大 for(i=n-1;i>1;i--) { if(a[i]<(a[i-1]+a[i-2]))//可以组成三角形 { ans=a[i]+a[i-1]+a[i-2]; printf("%d",ans); return 0; } } printf("%d",ans); return 0; }