题目
![]()
解法1
点击查看代码
#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
// 火星数字的低位单词
vector<string> lowDigits = {"tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};
// 火星数字的高位单词
vector<string> highDigits = {"tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};
// 地球数字转火星数字
string earthToMars(int num) {
if (num == 0) return lowDigits[0];
string result;
int high = num / 13;
int low = num % 13;
if (high > 0) {
result += highDigits[high - 1];
if (low != 0) result += " " + lowDigits[low];
} else {
result += lowDigits[low];
}
return result;
}
// 火星数字转地球数字
int marsToEarth(const string& mars) {
int spacePos = mars.find(' ');
if (spacePos != string::npos) { // 如果有空格,说明是两位数
string highStr = mars.substr(0, spacePos);
string lowStr = mars.substr(spacePos + 1);
int high = 0, low = 0;
for (int i = 0; i < highDigits.size(); i++) {
if (highDigits[i] == highStr) {
high = i + 1;
break;
}
}
for (int i = 0; i < lowDigits.size(); i++) {
if (lowDigits[i] == lowStr) {
low = i;
break;
}
}
return high * 13 + low;
} else { // 如果没有空格,说明是一位数
for (int i = 0; i < lowDigits.size(); i++) {
if (lowDigits[i] == mars) {
return i;
}
}
for (int i = 0; i < highDigits.size(); i++) {
if (highDigits[i] == mars) {
return (i + 1) * 13;
}
}
}
return 0;
}
int main() {
int n;
cin >> n;
cin.ignore(); // 忽略换行符
for (int i = 0; i < n; i++) {
string input;
getline(cin, input);
if (isdigit(input[0])) { // 如果是地球数字
int num = 0;
for (char ch : input) {
num = num * 10 + (ch - '0');
}
cout << earthToMars(num) << endl;
} else { // 如果是火星数字
cout << marsToEarth(input) << endl;
}
}
return 0;
}