P1603 斯诺登的密码题解

题目

(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
#include
#include
#include
using namespace std;
mapq;
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<

你可能感兴趣的:(C++,c++,算法)