Description
给出若干个半圆环,问这些圆环能否组成一个闭合图形
Input
多组用例,每组用例第一行为一整数n表示半圆环个数,第二行n个浮点数表示这n个半圆环的半径,以n=0结束输入
Output
对于每组用例,如果这些半圆环能够组成一个闭合图形则输出YES,否则输出NO
Sample Input
1
4.000
2
1.000 1.000
3
1.455 2.958 4.424
7
1.230 2.577 3.411 2.968 5.301 4.398 6.777
0
Sample Output
NO
YES
NO
YES
Solution
问题转化为给定几条边问能否组成多边形,将边长排序之后,如果存在i使得第i+1条边长度不大于前i条边之和,那么这n条边可以组成多边形
Code
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 22
int n,flag;
double r[maxn],sum;
int main()
{
while(scanf("%d",&n),n)
{
for(int i=0;i<n;i++)scanf("%lf",&r[i]);
sort(r,r+n);
flag=0;sum=0;
for(int i=0;i<n-1;i++)
{
sum+=r[i];
if(r[i+1]<=sum)
{
flag=1;
break;
}
}
if(flag)printf("YES\n");
else printf("NO\n");
}
return 0;
}