前言
正文
参考题解
#include<iostream>
#include<algorithm>
#include<string>
#include<map>
using namespace std;
/* 题意: 将地球数字和火星数字相互翻译 思路:刚开始想直接根据输入进行模拟,后面发现太麻烦了,之后发现 数据范围不超过169,故直接进行打表即可。 注意点: 对于13的倍数,不需要输出个位的tret! */
string digit[13]={"tret","jan","feb","mar","apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"}; //个位
string highDigit[13]={"tret","tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};//十位
string numToStr[170];//地球数字映射火星数字
map<string,int> strToNum;//火星数字映射地球数字
void init(){
for(int i=0;i<13;i++){
//个位
numToStr[i]=digit[i];
strToNum[digit[i]]=i;
//十位
numToStr[i*13]=highDigit[i];
strToNum[highDigit[i]]=i*13;
}
//十位+个位
for(int i=1;i<13;i++){//这里注意从1开始,因为对于13的倍数,不需要输出个位的tret(易错)
for(int j=1;j<13;j++){
string str=highDigit[i]+" "+digit[j];
numToStr[i*13+j]=str;
strToNum[str]=i*13+j;
}
}
}
int main(){
init();
int n;
string str;
cin>>n;
char ch;
cin.get(ch);
while(n--){
getline(cin,str);
if(str[0]>='0'&str[0]<='9'){//地球数字
cout<<numToStr[stoi(str)]<<endl;
}else{
cout<<strToNum[str]<<endl;
}
}
return 0;
}