题目链接:点击打开链接
知识点笔记:
题目中是整行输入,scanf("%d%*c",&n),另外cin是以空格结尾,getline是以回车结尾
由于题目的数只有两位,即0~168,所以直接可以打表实现
AC代码:
#include <iostream>
#include <string>
#include <map>
using namespace std;
string unitDigit[13]={"tret","jan","feb","mar","apr","may",
"jun","jly","aug","sep","oct","nov","dec"};
string tenDigit[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] = unitDigit[i]; //个位为[0,12],十位为0
strToNum[unitDigit[i]]=i;
numToStr[i*13] = tenDigit[i]; //十位为[0,12],个位为0
strToNum[tenDigit[i]] = i*13;
}
for(int i=1;i<13;i++) //十位
{
for(int j=1;j<13;j++)
{
string str = tenDigit[i]+" "+unitDigit[j];//火星文
numToStr[i*13+j]=str;
strToNum[str]=i*13+j;
}
}
}
int main() {
init();
int n;
scanf("%d%*c",&n);
while(n--){
string str;
getline(cin,str);
if(str[0]>=0 && str[0]<='9'){
int num=0;
for(int i=0;i<str.length();i++){
num=num*10+(str[i]-'0');
}
cout<<numToStr[num]<<endl;
}else{
cout<<strToNum[str]<<endl;
}
}
return 0;
}