星空's Blog
星空's Blog
PAT-A1100 Mars Numbers

原题

Mars Numbers (20 分)

题解

这题有点蛋疼
首先是输入的处理
得分清输入的是 地球文还是火星文
其次 进制转换,因为最大范围不超过 [0,169]
对应的13进制为[0,12-12],所以最多只要进行2次mod操作
这里的情况比较复杂,因为对于13来说,要输出的是1-0,对应的火星文是 tam tret,但是要求不输出tret,只输出tam
如果是火星文转地球文就简单了,我用了2个map来存储对应的序列,实现了一个find方法来通过value找到key,转换过来以后直接转十进制就可以了

代码

#include <iostream>
#include <string>
#include <cmath>
#include <map>
using namespace std;

int findKeyByValue(map<int,string> m,string value) {
    for (map<int,string>::iterator it = m.begin();it != m.end();it++) {
        if (it->second == value) {
            return it->first;
        }
    }
    return 0;
}

int main(void) { 
    map<int,string> lowMap;
    lowMap[0] = "tret";
    lowMap[1] = "jan"; 
    lowMap[2] = "feb"; 
    lowMap[3] = "mar"; 
    lowMap[4] = "apr"; 
    lowMap[5] = "may"; 
    lowMap[6] = "jun"; 
    lowMap[7] = "jly"; 
    lowMap[8] = "aug"; 
    lowMap[9] = "sep"; 
    lowMap[10] = "oct";
    lowMap[11] = "nov";
    lowMap[12] = "dec"; 

    map<int,string> highMap;
    highMap[1] = "tam";
    highMap[2] = "hel";
    highMap[3] = "maa";
    highMap[4] = "huh";
    highMap[5] = "tou";
    highMap[6] = "kes";
    highMap[7] = "hei";
    highMap[8] = "elo";
    highMap[9] = "syy";
    highMap[10] = "lok";
    highMap[11] = "mer";
    highMap[12] = "jou";

    int n;
    cin >> n;
    getchar();
    for (int i = 0;i < n;i++) {
        string s;
        getline(cin,s);
        if (isdigit(s[0])) {
            int sum = 0;
            for (int j = 0;j < s.length();j++) {
                sum += (s[j] - '0') * pow(10,s.length() - j - 1);
            }
            if (sum) {
                int mod = sum % 13;
                sum = sum / 13;
                if (sum && mod) {
                    cout << highMap[sum % 13] << " " << lowMap[mod] << endl;
                } else if (mod) {
                    cout << lowMap[mod] << endl;
                } else if (sum){
                    cout << highMap[sum] << endl;
                }
            } else {
                cout << lowMap[sum] << endl;
            }
        } else {
            if (s.length() == 3) {
                int t = findKeyByValue(lowMap,s);
                if (t) {
                    cout << t << endl;
                } else {
                    cout << findKeyByValue(highMap,s) * 13 << endl;
                }
            } else {
                cout << findKeyByValue(highMap,s.substr(0,3)) * 13 + findKeyByValue(lowMap,s.substr(4,s.length() - 4)) << endl;
            }
        }
    }
}
所有文章禁止转载。
代码仅供参考
为了对抗广告机器人,首次留言将会被审核
首页      算法学习      PAT-A      PAT-A1100 Mars Numbers

星空

文章作者

发表评论

textsms
account_circle
email

星空's Blog

PAT-A1100 Mars Numbers
原题 Mars Numbers (20 分) 题解 这题有点蛋疼 首先是输入的处理 得分清输入的是 地球文还是火星文 其次 进制转换,因为最大范围不超过 [0,169] 对应的13进制为[0,12-12],所以最多只要进…
扫描二维码继续阅读
2019-08-19