火星人是以 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
思路:这题用map做会简单很多,主要考察进制转换,这里有两种解法,推荐解法一......
1 /*1044火星数字 解法一
2 tret 0 , jan 1, feb 2, mar 3, apr 4, may 5, jun 6,
3 jly 7, aug 8, sep 9, oct 10, nov 11, dec 12 个位
4 tam 1, hel 2, maa 3, huh 4, tou 5, kes 6,
5 hei 7, elo 8, syy 9, lok 10, mer 11, jou 12 十位 */
6 #include<iostream>
7 #include<cstring>
8 #include<cmath>
9 #include<algorithm>
10 #include<map>
11 using namespace std;
12 int main()
13 {
14 string diwei[13]={"tret","jan","feb","mar", "apr", "may",
15 "jun", "jly", "aug", "sep", "oct", "nov", "dec"};
16 string gaowei[13]={"#","tam","hel", "maa", "huh", "tou", "kes", "hei",
17 "elo", "syy", "lok", "mer", "jou"};//忽略高位的0
18 map<int,string>earth_mars1;
19 map<int,string>earth_mars2;
20 map<string,int>mars_earth1;
21 map<string,int>mars_earth2;
22 for(int i=0;i<13;i++)
23 {
24 earth_mars1[i]=diwei[i];
25 earth_mars2[i]=gaowei[i];
26 mars_earth1[diwei[i]]=i;
27 mars_earth2[gaowei[i]]=i;
28 }
29 int T;
30 cin>>T;
31 getchar();
32 while(T--)
33 {
34 char ch;
35 string str1,str2;
36 int count=0,flag;
37 cin>>str1;
38 ch=getchar();
39 if(ch!='
')
40 cin>>str2;
41 if(str1[0]>='0'&&str1[0]<='9')
42 flag=0;//地球转火星
43 else
44 flag=1;//火星转地球
45
46
47 if(flag==0)//只有str1
48 {
49 int num=stoi(str1);
50 int shiwei=num/13;
51 int gewei=num%13;
52 if(shiwei!=0&&gewei!=0)
53 cout<<earth_mars2[shiwei]<<" "<<earth_mars1[gewei]<<endl;
54 else if(shiwei==0)
55 cout<<earth_mars1[gewei]<<endl;
56 else if(gewei==0)
57 cout<<earth_mars2[shiwei]<<endl;
58 }
59
60
61 else if(flag==1)//可能有str2
62 {
63 if(str2=="")//无str2
64 {
65 if(mars_earth1[str1]!=0)
66 cout<<mars_earth1[str1]<<endl;
67 else if(mars_earth1[str1]==0)//str1是高位
68 cout<<mars_earth2[str1]*13<<endl;
69 }
70 else
71 {
72 cout<<mars_earth2[str1]*13+mars_earth1[str2]<<endl;
73 }
74 }
75 }
76 return 0;
77 }
1 /*1044火星数字 解法二
2 tret 0 , jan 1, feb 2, mar 3, apr 4, may 5, jun 6, jly 7, aug 8, sep 9, oct 10, nov 11, dec 12 个位
3 tam 1, hel 2, maa 3, huh 4, tou 5, kes 6, hei 7, elo 8, syy 9, lok 10, mer 11, jou 12 十位 */
4 #include<stdio.h>
5 #include<math.h>
6 #include<string.h>
7 #include<stdlib.h>
8 #include<ctype.h>
9 int main()
10 {
11 int n;
12 scanf("%d
",&n);
13 char num[20];
14 int flag;
15 for(int i=0;i<n;i++)
16 {
17 gets(num);
18 if(num[0]>='0'&&num[0]<='9')
19 flag=1;//地球转火星
20 else
21 flag=0;//火星转地球
22 if(flag==1)
23 {
24 int shu=atoi(num);//字符串转数字
25 if(shu<13)
26 {
27 if(shu==0) printf("tret
");
28 else if(shu==1) printf("jan
");
29 else if(shu==2) printf("feb
");
30 else if(shu==3) printf("mar
");
31 else if(shu==4) printf("apr
");
32 else if(shu==5) printf("may
");
33 else if(shu==6) printf("jun
");
34 else if(shu==7) printf("jly
");
35 else if(shu==8) printf("aug
");
36 else if(shu==9) printf("sep
");
37 else if(shu==10) printf("oct
");
38 else if(shu==11) printf("nov
");
39 else if(shu==12) printf("dec
");
40 }
41 else if(shu>=13)
42 {
43 int ge=shu%13;
44 int shi=shu/13;
45 if(ge==0)
46 {
47 if(shi==1) printf("tam
");
48 else if(shi==2) printf("hel
");
49 else if(shi==3) printf("maa
");
50 else if(shi==4) printf("huh
");
51 else if(shi==5) printf("tou
");
52 else if(shi==6) printf("kes
");
53 else if(shi==7) printf("hei
");
54 else if(shi==8) printf("elo
");
55 else if(shi==9) printf("syy
");
56 else if(shi==10) printf("lok
");
57 else if(shi==11) printf("mer
");
58 else if(shi==12) printf("jou
");
59 }
60 else
61 {
62 if(shi==1) printf("tam ");
63 else if(shi==2) printf("hel ");
64 else if(shi==3) printf("maa ");
65 else if(shi==4) printf("huh ");
66 else if(shi==5) printf("tou ");
67 else if(shi==6) printf("kes ");
68 else if(shi==7) printf("hei ");
69 else if(shi==8) printf("elo ");
70 else if(shi==9) printf("syy ");
71 else if(shi==10) printf("lok ");
72 else if(shi==11) printf("mer ");
73 else if(shi==12) printf("jou ");
74
75 if(ge==1) printf("jan
");
76 else if(ge==2) printf("feb
");
77 else if(ge==3) printf("mar
");
78 else if(ge==4) printf("apr
");
79 else if(ge==5) printf("may
");
80 else if(ge==6) printf("jun
");
81 else if(ge==7) printf("jly
");
82 else if(ge==8) printf("aug
");
83 else if(ge==9) printf("sep
");
84 else if(ge==10) printf("oct
");
85 else if(ge==11) printf("nov
");
86 else if(ge==12) printf("dec
");
87 }
88 }
89 }
90 else if(flag==0)
91 {
92 int len=strlen(num);
93 int t=0;
94 for(int i=0;i<len;i++)
95 {
96 if(num[i]==' ')
97 t++;
98 }
99 if(t==0)
100 {
101 if(strcmp(num,"tret")==0) printf("0
");
102 else if(strcmp(num,"jan")==0) printf("1
");
103 else if(strcmp(num,"feb")==0) printf("2
");
104 else if(strcmp(num,"mar")==0) printf("3
");
105 else if(strcmp(num,"apr")==0) printf("4
");
106 else if(strcmp(num,"may")==0) printf("5
");
107 else if(strcmp(num,"jun")==0) printf("6
");
108 else if(strcmp(num,"jly")==0) printf("7
");
109 else if(strcmp(num,"aug")==0) printf("8
");
110 else if(strcmp(num,"sep")==0) printf("9
");
111 else if(strcmp(num,"oct")==0) printf("10
");
112 else if(strcmp(num,"nov")==0) printf("11
");
113 else if(strcmp(num,"dec")==0) printf("12
");
114 else if(strcmp(num,"tam")==0) printf("13
");
115 else if(strcmp(num,"hel")==0) printf("26
");
116 else if(strcmp(num,"maa")==0) printf("39
");
117 else if(strcmp(num,"huh")==0) printf("52
");
118 else if(strcmp(num,"tou")==0) printf("65
");
119 else if(strcmp(num,"kes")==0) printf("78
");
120 else if(strcmp(num,"hei")==0) printf("91
");
121 else if(strcmp(num,"elo")==0) printf("104
");
122 else if(strcmp(num,"syy")==0) printf("117
");
123 else if(strcmp(num,"lok")==0) printf("130
");
124 else if(strcmp(num,"mer")==0) printf("143
");
125 else if(strcmp(num,"jou")==0) printf("156
");
126 }
127 else if(t==1)
128 {
129 char shi1[5];
130 char ge1[5];
131 int flag1=0;
132 int t=0;
133 for(int i=0;i<len;i++)
134 {
135 if(flag1==0)
136 {
137 if(num[i]!=' ')
138 shi1[i]=num[i];
139 else
140 {
141 shi1[i]='