題目描述:
有n棍棍子,棍子i的長度爲ai,想要從中選出3根棍子組成周長儘可能長的三角形。請輸出最大的周長,若無法組成三角形則輸出0。
算法分析:
選擇3根棍子,它們能組成三角形的充要條件爲:最長棍子的長度<其餘兩根棍子的長度之和。所以我們可以先用三重循環枚舉所有的棍子選擇方案,再利用條件判斷是否能組成三角形。
#include<stdio.h>
int main()
{
int max(int x,int y);
int ans=0;
int n,a[100];
printf("please enter n:");
scanf("%d",&n);
printf("please inputs 10 numbers:");
for(int m=0;m<n;m++)
scanf("%d",&a[m]);
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
for(int k=j+1;k<n;k++)
{
int l=a[i]+a[j]+a[k];//周長
int m=max(a[i],max(a[j],a[k]));//最長棍子的長度
int r=l-m;//其餘兩根棍子的長度之和
//判斷是否可以組長三角形
if(m<r)
{
ans=max(ans,l);
}
}
printf("%d",ans);
return 0;
}
//調用函數求倆者中的最大值
int max(int x,int y)
{
return (x>y?x:y);
}
運行結果:
please enter n:5
please inputs 5 numbers:2 3 4 5 10
12