题目
(1)找出句子中所有用英文表示的数字(≤20),列举在下:
正规:one two three four five six seven eight nine ten eleven twelve
?thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty
非正规:a both another first second third
为避免造成歧义,another
?算作1处理。
(2)将这些数字平方后对100取模,如00,05,11,19,86,99。
(3)把这些两位数按数位排成一行,组成一个新数,如果开头为0,就去0。
(4)找出所有排列方法中最小的一个数。
输入输出格式
输入格式
一个含有6个单词的句子。
输出格式
一个整型变量(密码)。如果没有符合要求的数字出现,则输出0。
输入输出格式
输入格式
一个含有6个单词的句子。
输出格式
一个整型变量(密码)如果没有符合要求的数字出现,则输出0。
输入输出样例
输入样例
Black Obama is two five zero .
输出样例
425
代码
//使用了STL的map
#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
map<string,int>q;
const int mx=66;
int top;
int st[mx];
string s;
int main(){
q["one"]=1;q["two"]=2;q["three"]=3;q["four"]=4;q["five"]=5;q["six"]=6;q["seven"]=7;q["eight"]=8;q["nine"]=9;q["ten"]=10;
q["eleven"]=11;q["twelve"]=12;q["thirteen"]=13;q["fourteen"]=14;q["fifteen"]=15;q["sixteen"]=16;q["seventeen"]=17;q["eighteen"]=18;q["nineteen"]=19;q["twenty"]=20;
q["a"]=1;q["both"]=2;q["another"]=1;q["first"]=1;q["second"]=2;q["third"]=3;
//打表
for(int i=1;i<=6;i++){
cin>>s;
if(q[s]){//如果可以构成数字
int k=q[s]*q[s]%100;
if(k==0)continue;//如果为0,不用储存
st[++top]=k;
}
}
sort(st+1,st+top+1);//从小到大排
cout<<st[1];//如果开头为0,就去0
for(int i=2;i<=top;i++){//除了第一个数字,其他的都是10位数,不是的话直接补上0
if(st[i]<10)cout<<0;
cout<<st[i];
}
return 0;
}