P1603 斯诺登的密码题解

发布时间:2024年01月11日

题目

(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;
}
文章来源:https://blog.csdn.net/m0_72674633/article/details/135538425
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。