# 2022.6.2
# 关于“最大三角形”的题解报告
# 首先题目给出了n个火柴棒,让我们找出最大周长最大的三角形
# 那就直接开始吧
# 我们先用最暴力的方法
# 我们直接暴力枚举3个点
# 2022.6.2
# 关于“最大三角形”的题解报告
# 首先题目给出了n个火柴棒,让我们找出最大周长最大的三角形
# 那就直接开始吧
# 我们先用最暴力的方法
# 我们直接暴力枚举3个点
def check(x,y,z):#用来判断是否可以组成三角形
if x+y>z and x+z>y and y+z>x:
return True
return False
n=int(input())
a=list(map(int,input().split()))
# 首先特判一下n<3
if n<3:
print('小棍的个数不能组成三角形')
else:
#solve1() #这是优化后的做法
S=0
c=[]
for i in range(n):
for j in range(i+1,n):
for k in range(j+1,n):
if check(a[i],a[j],a[k]):#判断可不可以构成三角形
if a[i]+a[j]+a[k]>S:#比较一下周长
S=a[i]+a[j]+a[k]
c=[a[i],a[j],a[k]]
if S==0:#说明没有三角形
print('没有找到能组成三角形的小棍')
else:
c.sort()
print("最大三角形的周长是{}".format(S))
print("组成最大三角形的三条边是{},{},{}".format(c[0],c[1],c[2]))
# 但是这么写我们会发现好像运行超时了,发现时间只有30ms 坑人的题目
# 于是我们要想办法优化一下算法
# 既然是求最大的,那我们是不是就可以从最大的开始找起来
# 那我们就开始改代码了
# 一下内容跟在else 后面 我们直接写一个函数
def solve1():
a.sort()#我们从最大的开始找,找到一个就可以结束了
for i in range(n-1,1,-1):
for j in range(i-1,0,-1):
for k in range(j-1,-1,-1):
if check(a[i],a[j],a[k]):
print("最大三角形的周长是{}".format(a[i]+a[j]+a[k]))
print("组成最大三角形的三条边是{},{},{}".format(a[k],a[j],a[i]))
return
print('没有找到能组成三角形的小棍')
# 我们就成功做出来这道题目了
# 我们就成功做出来这道题目了
当然,这题目还有更好的方法:
可以直接考虑连续三个数就好了,
def solve2():
for i in range(n-1,3,-1):
if a[i]<a[i-1]+a[i-2]:
print("最大三角形的周长是%d"%(a[i]+a[i-1]+a[i-2]))
print("组成最大三角形的三条边是%d,%d,%d"%(a[i-2],a[i-1],a[i]))
return
print('没有找到能组成三角形的小棍')