题目


解法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;
}