P1603 斯诺登的密码

题目背景

根据斯诺登事件出的一道水题

题目描述

题目描述

2013年X月X日,俄罗斯办理了斯诺登的护照,于是他混迹于一架开往委内瑞拉的飞机。但是,这件事情太不周密了,因为FBI的间谍早已获悉他的具体位置——但这不是最重要的——最重要的是如果要去委内瑞拉,那么就要经过古巴,而经过古巴的路在美国的掌控之中。丧心病狂的奥巴马迫降斯诺登的飞机,搜查时却发现,斯诺登杳无踪迹。但是,在据说是斯诺登的座位上,发现了一张纸条。纸条由纯英文构成:Obama is a two five zero.(以"."结束输出,只有6个单词+一个句号,句子开头如没有大写亦为合法)这句话虽然有点无厘头,但是警官陈珺骛发现这是一条极其重要的线索。他在斯诺登截获的一台笔记本中找到了一个C++程序,输入这条句子后立马给出了相对应的密码。陈珺鹜高兴得晕了过去,身为警官的你把字条和程序带上了飞机,准备飞往曼哈顿国际机场,但是在飞机上检查的时候发现——程序被粉碎了!飞机抵达华盛顿只剩5分钟,你必须在这5分钟内编写(杜撰)一个程序,免受上司的10000000000%10大板。破译密码的步骤如下:

(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

(2)将这些数字平方后%100,如00,05,11,19,86,99。

(3)把这些两位数按数位排成一行,组成一个新数,如果开头为0,就去0。

(4)找出所有排列方法中最小的一个数,即为密码。

// 数据已经修正 By absi2011 如果还有问题请联系我

输入输出格式

输入格式:

 

一个含有6个单词的句子。

 

输出格式:

 

一个整型变量(密码)。

 

输入输出样例

输入样例#1: 复制
Black Obama is two five zero .
输出样例#1: 复制
425

输入输出样例

想不出别的什么方法,

只能模拟打表,,

感觉弄了好长时间。。。

打表就需要考虑很多特殊情况。。

然后这儿也用到了字符串快排。

 

代码虽然长,但应该不难理解。

代码:

 

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cmath>
  4 #include<algorithm>
  5 #include<cstring>
  6 #include<queue>
  7 #include<map>
  8 using namespace std;
  9 
 10 string a[8];
 11 string b[233];
 12 int t;
 13 
 14 bool cmp(string x,string y)
 15 {
 16     return x+y<y+x;
 17 }
 18 
 19 int main()
 20 {
 21     for(int i=1;i<=6;++i)
 22     {
 23         cin>>a[i];
 24         if(a[i]=="one"||a[i]=="a"||a[i]=="first") 
 25         {
 26             t++;
 27             b[t]="01";
 28          } 
 29         if(a[i]=="two"||a[i]=="both"||a[i]=="second") 
 30         {
 31             t++;
 32             b[t]="04";
 33          } 
 34          if(a[i]=="three"||a[i]=="another"||a[i]=="third") 
 35         {
 36             t++;
 37             b[t]="09";
 38          } 
 39          if(a[i]=="four") 
 40         {
 41             t++;
 42             b[t]="16";
 43          } 
 44          if(a[i]=="five") 
 45         {
 46             t++;
 47             b[t]="25";
 48          } 
 49          if(a[i]=="six") 
 50         {
 51             t++;
 52             b[t]="36";
 53          } 
 54          if(a[i]=="seven") 
 55         {
 56             t++;
 57             b[t]="49";
 58          } 
 59          if(a[i]=="eight") 
 60         {
 61             t++;
 62             b[t]="64";
 63          } 
 64          if(a[i]=="nine") 
 65         {
 66             t++;
 67             b[t]="81";
 68          } 
 69          if(a[i]=="ten") 
 70         {
 71             t++;
 72             b[t]="00";
 73          } 
 74          if(a[i]=="eleven") 
 75         {
 76             t++;
 77             b[t]="21";
 78          } 
 79          if(a[i]=="twelve") 
 80         {
 81             t++;
 82             b[t]="44";
 83          } 
 84          if(a[i]=="thirteen") 
 85         {
 86             t++;
 87             b[t]="69";
 88          } 
 89          if(a[i]=="fourteen") 
 90         {
 91             t++;
 92             b[t]="96";
 93          } 
 94          if(a[i]=="fifteen") 
 95         {
 96             t++;
 97             b[t]="25";
 98          } 
 99          if(a[i]=="sixteen") 
100         {
101             t++;
102             b[t]="56";
103          } 
104          if(a[i]=="seventeen") 
105         {
106             t++;
107             b[t]="89";
108          } 
109          if(a[i]=="eighteen") 
110         {
111             t++;
112             b[t]="24";
113          } 
114          if(a[i]=="nineteen") 
115         {
116             t++;
117             b[t]="61";
118          } 
119          if(a[i]=="twenty") 
120         {
121             t++;
122             b[t]="81";
123          } 
124     }    
125     if(t==0)
126     {
127         printf("0");
128         return 0;
129     }
130     sort(b+1,b+t+1,cmp);
131     if(b[1]=="01")
132     {
133         cout<<1;
134         for(int i=2;i<=t;++i)
135         {        
136             if(b[i]=="00") continue;
137             cout<<b[i];
138         }
139         return 0;    
140      } 
141     if(b[1]=="04") 
142     {
143         cout<<4;
144         for(int i=2;i<=t;++i)
145         {        
146             if(b[i]=="00") continue;
147             cout<<b[i];
148         }
149         return 0;    
150     }
151     if(b[1]=="09") 
152     {
153         cout<<9;
154         for(int i=2;i<=t;++i)
155         {        
156             if(b[i]=="00") continue;
157             cout<<b[i];
158         }
159         return 0;    
160     }
161     for(int i=1;i<=t;++i)
162     {        
163         if(b[i]=="00") continue;
164         cout<<b[i];
165     }    
166     return 0;
167 }

 


 

如果你不开心,那我就把右边这个帅傻子分享给你吧, 

你看,他这么好看,那么深情的望着你,你还伤心吗? 

真的!这照片盯上他五秒钟就想笑了。 

一切都会过去的。

posted @ 2018-08-06 20:46  孟东行#  阅读(325)  评论(0编辑  收藏  举报