题解:P1603 斯诺登的密码
思路
这题思路比较简单,输入之后判断其数字,存入数组后从小到大排序输出即可。
对于每个单词对应的数字,我们可以事先计算好再依次对每个单词进行判断。
输出时要注意,输出数字如果不为空则不能为
代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
int a[10], ans, cnt;
string s, c;
void zly(string x) {//函数,逐个判断每一种情况
if (x == "one" || x == "a" || x == "first" || x == "another")
a[++cnt] = 1;
if (x == "two" || x == "both" || x == "second")
a[++cnt] = 4;
if (x == "three" || x == "third")
a[++cnt] = 9;
if (x == "four")
a[++cnt] = 16;
if (x == "five")
a[++cnt] = 25;
if (x == "six")
a[++cnt] = 36;
if (x == "seven")
a[++cnt] = 49;
if (x == "eight")
a[++cnt] = 64;
if (x == "nine")
a[++cnt] = 81;
if (x == "ten")
a[++cnt] = 0;
if (x == "eleven")
a[++cnt] = 21;
if (x == "twelve")
a[++cnt] = 44;
if (x == "thirteen")
a[++cnt] = 69;
if (x == "fourteen")
a[++cnt] = 96;
if (x == "fifteen")
a[++cnt] = 25;
if (x == "sixteen")
a[++cnt] = 56;
if (x == "seventeen")
a[++cnt] = 89;
if (x == "eighteen")
a[++cnt] = 24;
if (x == "nineteen")
a[++cnt] = 61;
if (x == "twenty")
a[++cnt] = 0;//事先计算好,直接赋值
}
signed main() {
getline(cin, s);//用getline()输入可以直接读入一整句话
for (int i = 0; i < s.length() - 1; i++) {
if (s[i] == ' ') {
zly(c);
c = "";
} else
c += s[i];//分离字符串,记录每个单词
}
sort(a + 1, a + cnt + 1);//给数组从小到大排序
for (int i = 1; i <= cnt; i++) {
if ((a[i] != 0 && i == 1) || a[i] != 0) {//判断其不为零
if (a[i] < 10 && i != 1) {//不到十,要记得补零
cout << 0;
}
cout << a[i];
ans++;//记录是否输出
}
}
if (ans == 0) {//如果未输出,要输出0
cout << 0;
}
puts("");//换行
return 0;
}
附上AC记录 。