题目描述
Shoutmon给萌萌兽出了一个题:给出三条线段的长度,问能否组成三角形。不过线段的长度是通过每一个数位的英文给出的。你能帮助萌萌兽吗?
输入
每个输入文件中一组数据。
分三行分别给出三条线段的长度。每行以一个整数N(1<=N<=5)开始,表示后面给出的单词个数;接下来跟着N个英文单词,每个单词表示一个数位,线段的长度由这些英文单词直接拼接而成(例如one two three代表123,one one代表11),每两个单词之间用一个空格隔开。数字0到9分别用下面十个单词表示:zero、one、two、three、four、five、six、seven、eight、nine。数据保证每条线段的长度都不为0。
输出
如果可以组成三角形,那么输出YES;否则输出NO。
样例输入
1 one
2 one one
3 one one one
样例输出
NO
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int trans(string str){
if(str=="one") return 1;
else if(str=="two") return 2;
else if(str=="three") return 3;
else if(str=="four") return 4;
else if(str=="five") return 5;
else if(str=="six") return 6;
else if(str=="seven") return 7;
else if(str=="eight") return 8;
else if(str=="nine") return 9;
else return 0;
}
int num[4];
int main(){
int n;
while(scanf("%d",&n)!=EOF){
int k=1;
num[1]=0;
for(int i=0;i<n;i++){
string str;
cin>>str;
int na = trans(str);
num[1]*=10;
num[1]+=na;
}
scanf("%d",&n);
k=1;
num[2]=0;
for(int i=0;i<n;i++){
string str;
cin>>str;
int nb = trans(str);
num[2]*=10;
num[2]+=nb;
}
scanf("%d",&n);
k=1;
num[3]=0;
for(int i=0;i<n;i++){
string str;
cin>>str;
int nc = trans(str);
num[3]*=10;
num[3]+=nc;
}
sort(num+1,num+4);
// for(int i = 1;i<4;i++){
// cout<<num[i]<<" ";
// }
if(num[1] +num[2] >num[3]){
cout<<"YES"<<endl;
}
else
cout<<"NO"<<endl;
}
return 0;
}