火星人是以13进制计数的:
- 地球人的0被火星人称为tret。
- 地球人数字1到12的火星文分别为:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec。
- 火星人将进位以后的12个高位数字分别称为:tam, hel, maa, huh, tou, kes, hei, elo, syy, lok, mer, jou。
例如地球人的数字“29”翻译成火星文就是“hel mar”;而火星文“elo nov”对应地球数字“115”。为了方便交流,请你编写程序实现地球和火星数字之间的互译。
输入格式:
输入第一行给出一个正整数N(<100),随后N行,每行给出一个[0, 169)区间内的数字 —— 或者是地球文,或者是火星文。
输出格式:
对应输入的每一行,在一行中输出翻译后的另一种语言的数字。
输入样例:4 29 5 elo nov tam输出样例:
hel mar may 115 13
代码:
#include<stdio.h>
#include<map>
#include<string>
#include<stdlib.h>
#include<string.h>
using namespace std;
map<string,int> Map1;
map<string,int> Map2;
void init()
{
Map1["tret"]=0;
Map1["jan"]=1;
Map1["feb"]=2;
Map1["mar"]=3;
Map1["apr"]=4;
Map1["may"]=5;
Map1["jun"]=6;
Map1["jly"]=7;
Map1["aug"]=8;
Map1["sep"]=9;
Map1["oct"]=10;
Map1["nov"]=11;
Map1["dec"]=12;
Map2["tam"]=1;
Map2["hel"]=2;
Map2["maa"]=3;
Map2["huh"]=4;
Map2["tou"]=5;
Map2["kes"]=6;
Map2["hei"]=7;
Map2["elo"]=8;
Map2["syy"]=9;
Map2["lok"]=10;
Map2["mer"]=11;
Map2["jou"]=12;
}
int main()
{
int i,j,n,m,k,t,l;
char str1[5],str2[5],str[10];
scanf("%d",&n);
init();
getchar();
for(l=0;l<n;l++)
{
gets(str);
strcpy(str2,"");
//printf("%s\n",str);
for(i=0;str[i]!='\0';i++)
{
if(str[i]==' ')
{
for(j=0;j<i;j++)
{
str1[j]=str[j];
}
str1[j]='\0';
t=0;
for(j=i+1;str[j]!='\0';j++)
{
str2[t++]=str[j];
}
str2[t]='\0';
break;
}
}
if(str[i]=='\0')
{
strcpy(str1,str);
}
//printf("%s\n",str1);
if(str1[0]>='0'&&str1[0]<='9')
{
map<string,int>::iterator it;
m=atoi(str1);
if(m/13!=0)
{
for(it=Map2.begin();it!=Map2.end();it++)
{
if(it->second==(m/13))
{
if(m%13!=0)
printf("%s",(it->first).c_str());
else
printf("%s\n",(it->first).c_str());
break;
}
}
if(m%13!=0)
{
for(it=Map1.begin();it!=Map1.end();it++)
{
if(it->second==(m%13))
{
if(m/13!=0)
printf(" %s\n",(it->first).c_str());
else
printf("%s\n",(it->first).c_str());
break;
}
}
}
}
else
{
for(it=Map1.begin();it!=Map1.end();it++)
{
if(it->second==(m%13))
{
printf("%s\n",(it->first).c_str());
break;
}
}
}
}
else
{
if(Map2.find(str1)!=Map2.end())
{
k=0;
k+=Map2[str1];
k*=13;
if(strlen(str2)!=0)
{
k+=Map1[str2];
}
printf("%d\n",k);
}
else
{
printf("%d\n",Map1[str1]);
}
}
}
return 0;
}