题解:P1603 斯诺登的密码
这其实是一道很水的题, 我们只需要用字符串就可以了。
我们并不用和题目描述的一样,写完后对 100 取余,可以直接打表,这样会很方便,用
详见代码
#include<bits/stdc++.h>
using namespace std;
string a[30] = {"" , "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 b[30] = {0 , 1 , 4 , 9 , 16 , 25 , 36 , 49 , 64 , 81 , 0 , 21 , 44 , 69 , 96 , 25 , 56 , 89 , 24 , 61 , 0 , 1 , 4 , 1 , 1 , 4 , 9};
//a[i]对应数字^ 2 % 2 得到的数字
int main () {
int k = 0 , x[9178];
for (int i = 1;i <= 6;i ++){//输入6个单词
string y;
cin >> y;
for (int j = 1;j <= 26;j ++){//看看y对应26个数字中的哪一个
if(a[j] == y){
k ++; //k用来统计有多少个英文数字
x[k] = b[j];//x存储阿拉伯数字
break;//跳出循环
}
}
}
if(k == 0){
cout << 0;//特判,如果没有数字那就输出0
return 0;
}
sort(x + 1 , x + k + 1);//排序,让最后得出的是最小值
for (int i = 1;i <= k;i ++){
if(i != 1 && x[i] < 10) {
cout << 0;//补0
}
cout << x[i];//输出
}
return 0;//完美收场
}