洛谷 P1603 斯诺登的密码
斯诺登的密码
题目背景
根据斯诺登事件出的一道水题
题目描述
2013 年 X 月 X 日,俄罗斯办理了斯诺登的护照,于是他混迹于一架开往委内瑞拉的飞机。但是,这件事情太不周密了,因为 FBI 的间谍早已获悉他的具体位置——但这不是最重要的——最重要的是如果要去委内瑞拉,那么就要经过古巴,而经过古巴的路在美国的掌控之中。
丧心病狂的奥巴马迫降斯诺登的飞机,搜查时却发现,斯诺登杳无踪迹。但是,在据说是斯诺登的座位上,发现了一张纸条。纸条由纯英文构成:Obama is a two five zero.
(以 .
结束输出,只有
(1)找出句子中所有用英文表示的数字
正规: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
算作
(2)将这些数字平方后对
(3)把这些两位数按数位排成一行,组成一个新数,如果开头为
(4)找出所有排列方法中最小的一个数,即为密码。
// 数据已经修正 By absi2011 如果还有问题请联系我
输入格式
一个含有
输出格式
一个整型变量(密码)。如果没有符合要求的数字出现,则输出
样例 #1
样例输入 #1
Black Obama is two five zero .
样例输出 #1
题解
- 固定6个字符串只需要for6次
- 把所有数字预处理进数组或者map里
- 然后匹配对应的字符对应的数字到另一个数组中
- 对结果数组排序,然后判断第一个数是否为0, 其他字符要采取两位数输出“%02d”
- 特殊的情况是对zero可以不用判断,因为他最后一定是被除去的
425
#include <bits/stdc++.h>
using namespace std;
char a[30][20]={"zero","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"};//对应
int d[30]={0,1,4,9,16,25,36,49,64,81,00,21,44,69,96,25,56,89,24,61,0,1,4,1,1,4,9};
char c[100];
int b[10], top;
void solve() {
for(int i = 0; i < 6; i++) {
scanf("%s", c);
for(int j = 1; j <= 26; j++) {
if(!strcmp(c, a[j])) { // 相等则返回0
b[++top] = d[j];
break;
}
}
}
sort(b+1, b+top+1);
bool flag = false; // 判断是否是开头元素
for(int i = 1; i <= top; i++) {
if(flag) {
printf("%02d", b[i]);
}
else {
if(a[i]) {
printf("%d", b[i]);
flag = true;
}
}
}
if(!flag)printf("0"); // 特判
}
int main() {
FAST;
solve();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~