作者:王是王小明,仅用来记录自己的学习型经历,转载请表明出处
Actually this coding is not difficult ,the logic is very simple.Because the data volume is small,so the use of the STL’s map directly to establish a mapping table,the query can be directly.Readers need to pay attention to “%d%*c” this,use the “scanf” to intput later when the default “\n” with a newline.
#include <cstdio>
#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];
strToNum[unitDigit[i]] = i;
numToStr[i*13] = tenDigit[i];
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);
for(int i=0;i<n;i++)
{
//getchar();
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;
}