[洛谷1603]斯诺登的密码

来源:互联网 发布:知柏地黄丸一次吃多少 编辑:程序博客网 时间:2024/05/17 19:21

题目来源

www.luogu.org
原网址
http://www.luogu.org/problem/show?pid=1603#


题目背景

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

题目描述

题目描述
2013年X月X日,俄罗斯办理了斯诺登的护照,于是他混迹于一架开往委内瑞拉的飞机。但是,这件事情太不周密了,因为FBI的间谍早已获悉他的具体位置——但这不是最重要的——最重要的是如果要去委内瑞拉,那么就要经过古巴,而经过古巴的路在美国的掌控之中。丧心病狂的奥巴马迫降斯诺登的飞机,搜查时却发现,斯诺登杳无踪迹。但是,在据说是斯诺登的座位上,发现了一张纸条。纸条由纯英文构成:Obamais a two fivezero.(以"."结束输出,只有6个单词+一个句号,句子开头如没有大写亦为合法)这句话虽然有点无厘头,但是警官陈珺骛发现这是一条极其重要的线索。他在斯诺登截获的一台笔记本中找到了一个C++程序,输入这条句子后立马给出了相对应的密码。陈珺鹜高兴得晕了过去,身为警官的你把字条和程序带上了飞机,准备飞往曼哈顿国际机场,但是在飞机上检查的时候发现——程序被粉碎了!飞机抵达华盛顿只剩5分钟,你必须在这5分钟内编写(杜撰)一个程序,免受上司的10000000000大板。破译密码的步骤如下:
(1)找出句子中所有用英文表示的数字(≤20),列举在下:
    正规:one two three four five six seven eight nine ten eleventwelve          thirteen fourteen fifteen sixteen seventeen eighteennineteen            twenty
    非正规:a both another first second third
(2)将这些数字平方后0,如00,05,11,19,86,99。
(3)把这些两位数按数位排成一行,组成一个新数,如果开头为0,就去0。
(4)找出所有排列方法中最小的一个数,即为密码。
// 数据已经修正By absi2011 如果还有问题请联系我

输入输出格式

输入格式:

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

输出格式:

一个整型变量(密码)。

输入输出样例

输入样例#1:

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

题解

这题首先,当然是判断是不是正规或非正规的,然后直接转换成1,4,9。。。这样的数存到数组里。然后就要注意了:他说是“(3)把这些两位数按数位排成一行,组成一个新数,如果开头为0,就去0。”是两位数!!!所以每个数排序后,不能直接输出,所以要每次计数器乘以100(变成两位数直接加)再加上这个数。就是这里折腾了很长时间,一直想不明白一个点的问题。第四个点in是one two three.out就是10203(两位数,2变02,3变03,因为1是首位,所以01变1了)。这里大家一定一定一定要注意了!

 

 

代码

var
  s,s1:string;
  j,ans,i,t:longint;
  a:array[1..100] of longint;
  h:qword;
begin
  readln(s);
  j:=1;ans:=0;
  for i:=1 to length(s) do
  if (s[i]=' ')or(i=length(s)) then
  begin
   s1:=copy(s,j,i-j);
   inc(ans);
    if(s1='one')or(s1='a') then a[ans]:=1
    else if(s1='two')or(s1='both')or(s1='another')or(s1='second') thena[ans]:=4
    else if(s1='three')or(s1='third') then a[ans]:=9
    else ifs1='four' then a[ans]:=16
    else ifs1='five' then a[ans]:=25
    else ifs1='six' then a[ans]:=36
    else ifs1='seven' then a[ans]:=49
    else ifs1='eight' then a[ans]:=64
    else ifs1='nine' then a[ans]:=81
    else ifs1='eleven' then a[ans]:=21
    else ifs1='twelve' then a[ans]:=44
    else ifs1='thirteen' then a[ans]:=69
    else ifs1='fourteen' then a[ans]:=96
    else ifs1='fifteen' then a[ans]:=25
    else ifs1='sixteen' then a[ans]:=56
    else ifs1='seventeen' then a[ans]:=89
    else ifs1='eighteen' then a[ans]:=24
    else ifs1='nineteen' then a[ans]:=61;
   j:=i+1;
    if a[ans]=0then dec(ans);
  end;
  for i:=1 to ans-1 do
    for j:=i+1to ans do
    ifa[i]>a[j] then begin t:=a[i];a[i]:=a[j];a[j]:=t;end;
  h:=0;
  for i:=1 to ans do h:=h*100+a[i];
  writeln(h);
end.

0 0
原创粉丝点击