很久以前(几个月前吧)就注意到了这题,然而。。。看了两眼就懒得思考了。。。以后好几次都是这样,今天算是还债吧。
建议大家先把英文数字和对应运算结果的表打好,这样就很方便(这时候就不用保留0了,比如10^2=100,100%100=0,题目里说是00,这时候先直接赋值为0,后面再做判断)
因为题目说了每个句子就是6个单词,所以直接i 1~6循环读入
然后每次读入都判断一下是不是英文数字,如果是就加到一个数组里(把运算结果放进去)
把数组排序(因为要求最小嘛)
先判断一下句子里有没有英文数字,没有直接输出0
然后把数组里的值都输出
注意:根据题目要求“组成一个新数,如果开头为0,就去0”,说明除了第一个,后面每个数如果只有一位都要在十位补上一个0
#include<iostream>
#include<algorithm>
using namespace std;
string yw[30]={"","one","two","three","four","five","six","seven",
"eight","nine","ten","elven","twelve","thirteen","fourteen","fifteen",
"sixteen","seventeen","eighteen","nineteen","twenty","a","both",
"another","first","second","third"};
int sz[30]={0,1,4,9,16,25,36,49,64,81,0,21,44,69,96,25,56,89,24,61,0,
1,4,1,1,4,9};
int k;
int a[10];
int main()
{
for(int i=1;i<=6;i++)
{
string x;
cin>>x;//直接用变量读就行了
for(int j=1;j<=26;j++)//26种英文数字
if(yw[j]==x)
{a[++k]=sz[j];break;}//k记录有几个英文数字
}
if(k==0){cout<<0<<endl;return 0;}//先判断一下句子中有没有英文数字
sort(a+1,a+k+1);//排序
for(int i=1;i<=k;i++)
{
if(i!=1&&a[i]<10)cout<<0;//补0
cout<<a[i];
}
cout<<endl;
return 0;
}