数据不多,所以用打表法完成.getline(cin,str)是读取一行,注意用getchar回收上面scanf结束的回车。cin以空格为结尾,getline以回车作为结尾(因为是读取一整行).
用stringstream来完成字符串到int的转化过程.
题面信息复制复制复制否则太容易错了。
#include<bits/stdc++.h> using namespace std; string tendigit[13] = { "tret","tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mer","jou" }; string unitdigit[13] = { "tret","jan","feb","mar","apr","may","jun","jly","aug","sep","oct","nov","dec" }; string numToString[170]; map<string, int>stringToNum; void init() { int i,j; for (i = 0; i < 13; i++) { numToString[i] = unitdigit[i]; stringToNum[unitdigit[i]] = i; numToString[13 * i] = tendigit[i]; stringToNum[tendigit[i]] = 13 * i; } for (i = 1; i < 13; i++) { for (j = 1; j < 13; j++) { int m = 13 * i + j; numToString[m] = tendigit[i] + " " + unitdigit[j]; stringToNum[tendigit[i] + " " + unitdigit[j]] = m; } } } int main() { init(); int n; scanf("%d", &n); getchar(); int i; for (i = 0; i < n; i++) { string str; getline(cin, str); if (str[0] >= '0'&&str[0] <= '9') { int m; stringstream ss; ss << str; ss >> m; cout << numToString[m] << endl; } else { cout << stringToNum[str] << endl; } } }